std::copyとは?
- 指定されたイテレータ範囲の要素のコピーを行う関数。
- これにより、for文を使わずvectorを別のvectorにコピーすることができます。
- 参考サイト:copy - cpprefjp C++日本語リファレンス
- また、std::copyの引数を以下の表に示します。
第1引数 | コピー元のイテレータの先頭 |
---|---|
第2引数 | コピー元のイテレータの末尾 |
第3引数 | コピー先のイテレータの先頭 |
使用例1:vectorの全要素をコピー
コピー元(v1)、コピー先(v2)とすれば、引数は以下のようにします。
第1引数 | v1.begin() |
---|---|
第2引数 | v1.end() |
第3引数 | v2.begin() |
ソースコード
#include <iostream> #include <vector> #include <algorithm> int main(void) { // 配列の宣言 std::vector<int> v1{3, 5, 6, 7, 8}; std::vector<int> v2(v1.size()); //copyによりリサイズはされないので、サイズ設定はあらかじめしておく std::copy(v1.begin(), v1.end(), v2.begin()); // v2の表示 std::cout << "v2 = { "; for (int i = 0; i < v2.size(); i++) { std::cout << v2[i] << ", "; } puts("}"); return 0; }
実行結果
v2 = { 3, 5, 6, 7, 8, }
使用例2:vectorの一部のみをコピー
- 引数のイテレーションの設定次第で一部だけコピーもできます。
- 例) v2の1, 2番目の要素に、v1の0, 1番目の要素をコピーするときの各引数。
第1引数 | v1.begin() |
---|---|
第2引数 | v1.begin() + 2 |
第3引数 | v2.begin() + 1 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> int main(void) { // 配列の宣言 std::vector<int> v1{3, 5, 6, 7, 8}; std::vector<int> v2{-1, -1, -1, -1}; std::copy(v1.begin(), v1.begin() + 2, v2.begin() + 1); // v2の表示 std::cout << "v2 = { "; for (int i = 0; i < v2.size(); i++) { std::cout << v2[i] << ", "; } puts("}"); return 0; }
実行結果
v2 = { -1, 3, 5, -1, }