copy_backward

copy_backward は copy に似ているようで、少し動作がわかりにくいところがあるので注意が必要です。

どこが分かりにくいか、というとコピー先の場所の指定が少々直感的でない(ように私は思います)。

copy_backward の利用例・サンプル

#include <iostream>
#include <vector>
using namespace std;

int main() {

  vector<char> v;
  vector<char>::iterator i;

  for (int j = 0; j < 20; j++) {
    v.push_back('a' + j);
  }

  i = v.begin();
  while (i != v.end()) {
    cout << *i;
    ++i;
  }
  cout << endl;

  copy_backward(v.begin(), v.begin() + 5, v.end() - 3);

  i = v.begin();
  while (i != v.end()) {
    cout << *i;
    ++i;
  }
  cout << endl;

  return 0;

}

上記コードの実行結果は以下の通り。

./a.out
abcdefghijklmnopqrst
abcdefghijklabcderst

このように、v.begin() から5つ分の要素が、v.end()から 3 引いた場所の後方に詰めるようにコピーされていることが確認できますね。