C/C++ 入門

ホーム > STL の使い方 > copy

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
ホーム > STL の使い方 > copy