C++ でベクターをベクターに追加
胡金庫
2023年10月12日
この記事では、C++ でベクトルを別のベクトルに追加する方法をいくつか説明します。
C++ でベクトルを別のベクトルに追加するには insert
関数を使用する
insert
メソッドは std::vector
コンテナの組み込み関数であり、vector
オブジェクトに複数の要素を追加することができます。最初の例として、ある vector
から別の vector
に与えられた範囲を追加する方法を示します。引数に 3つのイテレータを指定すると、insert
関数は最初のパラメータとして渡されたイテレータの前に、最後の 2つの引数の範囲の要素を追加します。次のコード例では、最初の vector
オブジェクトの end
イテレータを渡しているので、この関数は本質的に 2つのベクトルの追加を行っていることになります。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << vec.at(i) << "; ";
}
cout << endl;
}
int main() {
vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};
vector<int> i_vec2 = {121, 321, 431, 531, 231, 651, 841};
cout << "i_vec1 : ";
printVectorElements(i_vec1);
i_vec1.insert(i_vec1.end(), i_vec2.begin(), i_vec2.end());
cout << "i_vec1 (inserted): ";
printVectorElements(i_vec1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
i_vec1 : 12; 32; 43; 53; 23; 65; 84;
i_vec1 (inserted): 12; 32; 43; 53; 23; 65; 84; 121; 321; 431; 531; 231; 651; 841;
または、std::end
/std::begin
メソッドを使用してイテレータを指定し、insert
関数に引数を渡すより一般的な方法を実装することもできます。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << vec.at(i) << "; ";
}
cout << endl;
}
int main() {
vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};
vector<int> i_vec2 = {121, 321, 431, 531, 231, 651, 841};
cout << "i_vec1 : ";
printVectorElements(i_vec1);
i_vec1.insert(std::end(i_vec1), std::begin(i_vec2), std::end(i_vec2));
cout << "i_vec1 (inserted): ";
printVectorElements(i_vec1);
cout << endl;
return EXIT_SUCCESS;
}
insert
関数を使用して C++ のベクトルに要素を追加する
もう一つの一般的な insert
メソッドの使い方は、与えられた値を持つ要素の範囲を vector
に追加することです。例えば、整数の vector
の最初の 4つの位置にゼロを挿入することができます。第 1 引数は要素を追加する前の要素の位置であることに注意してください。この insert
メソッドは、new
コールを用いて vector
の要素を手動で確保した場合でも利用できます。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << vec.at(i) << "; ";
}
cout << endl;
}
int main() {
vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};
cout << "i_vec1 : ";
printVectorElements(i_vec1);
i_vec1.insert(i_vec1.begin(), 4, 0);
cout << "i_vec1 (inserted): ";
printVectorElements(i_vec1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
i_vec1 : 12; 32; 43; 53; 23; 65; 84;
i_vec1 (inserted): 0; 0; 0; 0; 12; 32; 43; 53; 23; 65; 84;
insert
メソッドは、2つの文字列のベクトルを連結する必要がある場合にも適用できます。次の例は、整数ベクトルで用いられるのとほぼ同じ構文を用いて、指定されたケースを示しています。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
void printVectorElements(vector<T> &vec) {
for (auto i = 0; i < vec.size(); ++i) {
cout << vec.at(i) << "; ";
}
cout << endl;
}
int main() {
vector<string> str_vec1 = {"doordash", "dribble", "renode", "xilinx"};
vector<string> str_vec2 = {"airbus", "sikorsky"};
str_vec1.insert(str_vec1.end(), str_vec2.begin(), str_vec2.end());
printVectorElements(str_vec1);
cout << endl;
return EXIT_SUCCESS;
}
出力:
doordash; dribble; renode; xilinx; airbus; sikorsky;
著者: 胡金庫