C++のvectorからサブvectorを抽出します
この投稿では、C++のvectorからサブvectorを抽出する方法について説明します。
1.範囲コンストラクターの使用
範囲コンストラクターは、指定された範囲のすべての要素を含む新しいvectorを作成します。vectorからサブvectorを抽出するには、イテレータをサブvectorの開始位置と終了位置に渡します。これを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8}; int start = 2; int end = 4; std::vector<int> slice(v.begin() + start, v.begin() + end + 1); for (int &i: slice) { std::cout << i << ' '; } return 0; } |
出力:
2 3 4
2.使用する std::vector::insert
既存のvectorの場合、 std::vector::insert
宛先vectorへのイテレーターと、vector要素の範囲を指定するイテレーターを取得するメンバー関数。この関数の一般的な呼び出しは次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8}; int start = 2; int end = 4; std::vector<int> slice; slice.insert(slice.begin(), v.begin() + start, v.begin() + end + 1); for (int &i: slice) { std::cout << i << ' '; } return 0; } |
出力:
2 3 4
3.使用する std::copy
別のオプションは、 std::copy
指定された範囲のすべての要素を別のvectorにコピーするための標準アルゴリズム。コードは次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8}; int start = 2; int end = 4; std::vector<int> slice; std::copy(v.begin() + start, v.begin() + end + 1, std::back_inserter(slice)); for (int &i: slice) { std::cout << i << ' '; } return 0; } |
出力:
2 3 4
4.使用する std::vector::assign
最後に、 std::vector::assign
vectorの内容を指定された範囲の要素に置き換えるメンバー関数。次のC++プログラムはそれを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8}; int start = 2; int end = 4; std::vector<int> slice; slice.assign(v.begin() + start, v.begin() + end + 1); for (int &i: slice) { std::cout << i << ' '; } return 0; } |
出力:
2 3 4
これで、C++のvectorからサブvectorを抽出できます。