C++のベクトルは動的配列であり、要素のシーケンスを柔軟に管理する方法を提供します。効率的な反復処理は、多くのベクトルベースの操作にとって重要です。この記事では、C++ベクトルを反復処理するいくつかの方法を説明し、それぞれについて明確な例を示します。
目次
C++におけるベクトルの理解
C++標準テンプレートライブラリ(STL)の一部であるベクトルは、<vector>
ヘッダーを使用して宣言されます。従来のCスタイルの配列に比べて、いくつかの利点があります。
- 動的サイズ変更: ベクトルのサイズは必要に応じて自動的に変更されるため、メモリ管理が簡素化されます。
- 容易な要素アクセス: 要素は配列と同様に
[]
演算子を使用してアクセスされます。 - STLとの統合: ベクトは他のSTLコンポーネントとシームレスに統合されます。
ベクトルの宣言と初期化方法は次のとおりです。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
return 0;
}
従来のfor
ループによる反復処理
従来のfor
ループは、反復処理を明示的に制御できます。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
for (size_t i = 0; i < myVector.size(); ++i) {
std::cout << myVector[i] << " ";
}
std::cout << std::endl; // 出力: 1 2 3 4 5
return 0;
}
ループカウンタにsize_t
を使用することで、互換性が確保され、潜在的な警告が回避されます。
範囲ベースのfor
ループによる反復処理
C++11で導入された範囲ベースのfor
ループは、反復処理を簡素化します。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
for (auto element : myVector) {
std::cout << element << " ";
}
std::cout << std::endl; // 出力: 1 2 3 4 5
return 0;
}
auto
を使用すると、要素の型が自動的に推論されるため、コードが簡潔で読みやすくなります。
イテレータによる反復処理
イテレータは、コンテナをトラバースするための強力で柔軟な方法を提供します。順方向、逆方向、その他のトラバース方法をサポートします。単純な反復処理には簡潔ではありませんが、複雑な操作には不可欠です。
#include <iostream>
#include <vector>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
for (std::vector<int>::iterator it = myVector.begin(); it != myVector.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl; // 出力: 1 2 3 4 5
return 0;
}
myVector.begin()
とmyVector.end()
は、それぞれベクトルの先頭と末尾の次の要素を指すイテレータを返します。逆参照演算子(*
)は、イテレータの値にアクセスします。
適切な反復処理方法の選択
最適な反復処理方法は、ニーズによって異なります。単純な反復処理には、可読性と効率性の観点から、範囲ベースのfor
ループが推奨されることがよくあります。従来のfor
ループはより多くの制御を提供し、イテレータは高度なシナリオで最大の柔軟性を提供します。