C++競プロ学習日記(仮)

( 学習記録であり解説Blogではないです )

std::copy_backward|std::next

std::copy_backwardstd::next を覚えたのでメモ。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> vc{1,2,3,4,5,6,7,8,9,10};
    //指定された範囲の要素を後ろからコピーする
    copy_backward( vc.begin(), vc.begin() + 3, vc.end() );
    for( const auto& x : vc ) cout << x << " ";
    return 0;
}

↓OUTPUT

1 2 3 4 5 6 7 1 2 3 

vc.begin() から vc.begin() + 3 までを そのまま後ろにずらしてコピーされている。
(上記の場合 1, 2, 3 を後ろにコピー。8, 9, 10 が上書きされている。)

で、vc.begin() + 3 というのは std::next を使って
next( vc.begin(), 3 ) とも書ける様です。(C++11)
std::nextn回進めたイテレータを返す

参考
copy_backward - cpprefjp C++日本語リファレンス
next - cpprefjp C++日本語リファレンス