copy

シーケンスをコピーするには copy を利用します。

コピー先要素の確保に注意

コピーを行う時にはコピー先のメモリを確保しておく必要があります。次の例では v から v2 に内容をコピーしていますが、 v2 を v のサイズ v.size() で初期化していることに注意してください。

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

int main() {

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

  v.push_back('a');
  v.push_back('c');
  v.push_back('b');

  vector<char> v2(v.size());
  copy(v.begin(), v.end(), v2.begin());

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

  return 0;
}

次のようなエラーが出たらメモリの確保が出来ているか確認してください。

./a.out
Segmentation fault

特定のサイズで初期化しない場合は次の例のように、back_inserter を使用することもできます。

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

int main() {

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

  v.push_back('a');
  v.push_back('c');
  v.push_back('b');

  vector<char> v2;

  copy(v.begin(), v.end(), back_inserter(v2));

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

  return 0;
}

実行結果は次の通りです。

./a.out
a
c
b