イテレータのカテゴリと走査
メニューを表示するにはスワイプしてください
イテレータはC++標準テンプレートライブラリ(STL)の基本要素であり、コンテナの要素に一貫した方法でアクセスし、走査する手段を提供します。STLでは、異なる機能を持つ複数のイテレータカテゴリが定義されています。
- 入力イテレータ:前方向のみで一度だけ要素を読み取ることが可能;
- 出力イテレータ:前方向のみで一度だけ要素を書き込むことが可能;
- 前方イテレータ:読み書きの両方に対応し、前方向に複数回の走査が可能;
- 双方向イテレータ:前方イテレータの機能に加え、後方への走査も可能;
- ランダムアクセスイテレータ:双方向イテレータのすべての機能に加え、算術演算による任意の要素への定数時間アクセスが可能。
各STLコンテナは、その内部構造に応じて特定のカテゴリのイテレータを提供します。これらのカテゴリを理解することで、各コンテナに適したアルゴリズムや走査手法を選択できます。
main.cpp
123456789101112131415161718192021222324252627282930313233#include <iostream> #include <vector> #include <list> int main() { std::vector<int> v = {1, 2, 3, 4, 5}; std::list<int> l = {10, 20, 30, 40, 50}; std::cout << "Traversing std::vector (random access iterator): "; for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; std::cout << "Traversing std::list (bidirectional iterator): "; for (auto it = l.begin(); it != l.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // Demonstrating random access (only valid for vector, not list) std::cout << "Accessing third element in vector using iterator arithmetic: "; auto v_it = v.begin(); v_it += 2; // advance by 2 positions std::cout << *v_it << std::endl; // Uncommenting the following lines would cause a compile error // because std::list iterators do not support random access // auto l_it = l.begin(); // l_it += 2; // std::cout << *l_it << std::endl; }
イテレータの操作と対応カテゴリ
イテレータは、コンテナ要素の走査や操作を可能にするいくつかの基本操作を提供します。主な操作は次のとおりです。
各イテレータカテゴリがどの操作をサポートしているかを理解することは、効率的かつ正確なコードを書くために不可欠です。例えば、std::vector のイテレータでは算術演算が使用できますが、std::list のイテレータでは使用できません。この違いにより、各コンテナで利用できるアルゴリズムや走査パターンが決まります。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 2
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 2