C++ でのベクトルコンテナオブジェクトのコピー
- C++ でイニシャライザリスト表記を使用してベクトルコンテナオブジェクトをコピーする
-
C++ で
std::copy
アルゴリズムを使用してベクターコンテナオブジェクトをコピーする - C++ で代入演算子のコピーを使用してベクトルコンテナオブジェクトをコピーする
- C++ でコピーコンストラクタを使用してベクターコンテナオブジェクトをコピーする
-
C++ で
assign
メンバー関数を使用してベクターコンテナオブジェクトをコピーする
この記事では、C++ で std::vector
コンテナオブジェクトをコピーする方法のいくつかの方法について説明します。
C++ でイニシャライザリスト表記を使用してベクトルコンテナオブジェクトをコピーする
std::vector
は、STL コンテナライブラリで提供されるコアデータ構造です。動的にサイズ設定された配列要素を実装し、その要素は連続して格納されます。ユーザーが配列に要素を追加または削除すると、メモリ管理が自動的に実行されます。std::vector
タイプの新しい変数を作成するときに、イニシャライザリスト表記を使用してベクトルオブジェクトのコピーを作成できます。新しいオブジェクトにコピーする必要がある元のベクトルオブジェクトの begin
および end
イテレータを渡す必要があることに注意してください。同じ表記法を使用して、対応するイテレータを中括弧内の引数として指定することにより、オブジェクトの任意のサブベクトルを抽出できます。
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = {vec1.begin(), vec1.end()};
vector<int> vec1_cc = {vec1.begin(), vec1.end() - 4};
printVector(vec1_c);
printVector(vec1_cc);
return EXIT_SUCCESS;
}
出力:
23; 43; 324; 222; 649; 102; 40; 304;
23; 43; 324; 222;
C++ で std::copy
アルゴリズムを使用してベクターコンテナオブジェクトをコピーする
std::vector
オブジェクトをコピーする別の方法は、STL アルゴリズムライブラリから std::copy
関数を呼び出すことです。範囲ベースのオブジェクトの一般的なコピー操作を提供します。関数には複数のオーバーロードがありますが、次のコードスニペットで使用されているオーバーロードは 3つのイテレーター引数を取ります。最初の 2つは元のベクトル範囲を指定し、3 番目のイテレーターは宛先ベクトル範囲の開始を示します。
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1.size());
copy(vec1.begin(), vec1.end(), vec1_c.begin());
printVector(vec1_c);
return EXIT_SUCCESS;
}
出力:
23; 43; 324; 222; 649; 102; 40; 304;
C++ で代入演算子のコピーを使用してベクトルコンテナオブジェクトをコピーする
または、コピー代入演算子を使用して、std::vector
コンテナオブジェクトの内容をコピーすることもできます。この表記は、この問題の最も簡潔な解決策です。元のベクトルの変数を新しく宣言されたベクトルオブジェクトに割り当てる必要があります。
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c = vec1;
printVector(vec1_c);
return EXIT_SUCCESS;
}
出力:
23; 43; 324; 222; 649; 102; 40; 304;
C++ でコピーコンストラクタを使用してベクターコンテナオブジェクトをコピーする
一方、std::vector
クラスのコピーコンストラクターは、新しく宣言されたベクターオブジェクトにベクターをコピーするための同様のメソッドを提供します。この場合、新しく作成されたベクトル変数が宣言されるときに、元のベクトルの変数を括弧内に渡す必要があります。
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c(vec1);
printVector(vec1_c);
return EXIT_SUCCESS;
}
出力:
23; 43; 324; 222; 649; 102; 40; 304;
C++ で assign
メンバー関数を使用してベクターコンテナオブジェクトをコピーする
std::vector
コンテナは、assign
メンバー関数を提供します。この関数を使用して、あるベクトルオブジェクトのコンテンツを別のベクトルの要素に置き換えることができます。空の vector
コンテナを初期化してから、オブジェクトから assign
関数を呼び出して、別のベクターの内容をコピーできることに注意してください。
#include <iostream>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(std::vector<T> v) {
for (const auto &item : v) {
cout << item << "; ";
}
cout << endl;
}
int main() {
vector<int> vec1 = {23, 43, 324, 222, 649, 102, 40, 304};
vector<int> vec1_c;
vec1_c.assign(vec1.begin(), vec1.end());
printVector(vec1_c);
return EXIT_SUCCESS;
}
出力:
23; 43; 324; 222; 649; 102; 40; 304;