Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 走査の基本 | イテレータの基礎
C++ STLイテレータ

book走査の基本

メニューを表示するにはスワイプしてください

Note
定義

C++標準ライブラリのコンテナでは、begin() および end() メンバ関数が、コンテナの先頭および末尾の次の位置を示すイテレータを提供するために使用されます。

begin()end() を組み合わせて使用することで、有効な要素範囲を定義します。begin() からのイテレータは最初の要素を指し、end() は最後の要素の直後の位置を示し、有効なデータを参照しません。この半開区間 [begin(), end()) にはすべての要素が含まれ、アルゴリズムが無効なメモリにアクセスせずにイテレーションの終了を検出できます。

main.cpp

main.cpp

copy
123456789101112131415
#include <iostream> #include <list> int main() { std::list<int> numbers = {10, 20, 30, 40, 50}; // Iterator 'it' starts at begin(), will stop at end() for (auto it = numbers.begin(); it != numbers.end(); ++it) { // Safe to dereference 'it' here: it points to a valid element std::cout << *it << " "; std::cout << std::endl; // Note: 'it' never equals end() inside the loop body }

この例では、イテレータを使用した典型的な走査パターンを示しています。ループはイテレータを begin() で開始し、イテレータが end() と等しくない限り継続します。ループ内では、イテレータの参照外しは常に安全であり、有効な要素を指しています。イテレータはループ本体内で end() と等しくなることはなく、コンテナに属さないメモリへのアクセスを防ぎます。このループ構造は重要であり、実際にコンテナ内に存在する要素のみをアクセスし、末尾を越えて読み取ることがないようにします。

main.cpp

main.cpp

copy
12345678910
#include <iostream> #include <list> int main() { std::list<int> numbers = {100, 200, 300}; auto it = numbers.end(); // 'it' points one past the last element // Mistakenly trying to dereference end() - undefined behavior! std::cout << *it << std::endl; // This is a common mistake }

end() が返すイテレータを参照外しすると、未定義動作が発生します。end() は有効な要素を指していないため、プログラムがクラッシュしたり予測不能な結果を招く可能性があります。包含/非包含境界パターン [begin(), end()) により、有効な要素のみがアクセスされることが保証されます。最初の例はこのルールに従っていますが、2番目の例は end() の排他的境界を無視した場合に何が起こるかを示しています。

Note
注意

[begin(), end()) イテレーションパターンは、std::vectorstd::liststd::dequestd::set など、イテレータをサポートするすべての標準ライブラリコンテナで一貫しています。これにより、どのコンテナ型にも対応する汎用的なコードの記述が容易になります。

question mark

STLコンテナにおいて、end() イテレータは何を表しますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  3
some-alt