Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ランダムアクセスイテレータ | イテレータの基礎
C++ STLイテレータ

bookランダムアクセスイテレータ

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

Note
定義

ランダムアクセスイテレータは、直接要素へのアクセスや算術演算(整数の加減による複数位置の移動や、[] 演算子によるインデックス指定アクセス)をサポートするイテレータ。

ランダムアクセスイテレータは、C++で最も高機能なイテレータ型。任意のオフセットによる前後移動、距離の比較、[] 演算子による要素アクセスが可能で、生ポインタと同様の操作ができる。std::vectorstd::deque などのコンテナはランダムアクセスイテレータを提供するが、std::liststd::setstd::map などのコンテナは、内部構造上、位置による効率的な直接アクセスができないため、ランダムアクセスイテレータを持たない。

main.cpp

main.cpp

copy
12345678910111213141516171819
#include <iostream> #include <vector> int main() { std::vector<int> numbers{10, 20, 30, 40, 50}; // Iterator arithmetic auto it = numbers.begin(); it = it + 3; // Move forward by 3 positions std::cout << "Element at position 3: " << *it << '\n'; // Using the [] operator std::cout << "Element at position 2 using iterator[2]: " << it[-1] << '\n'; // Difference between iterators auto diff = numbers.end() - numbers.begin(); std::cout << "Distance between begin and end: " << diff << '\n'; }

このコードは、std::vector を用いたランダムアクセスイテレータの特徴を示しています。begin() にオフセットを加えることで、特定の要素へ直接ジャンプできます。また、[] 演算子はイテレータ位置から相対的に要素へアクセスします。イテレータ同士を減算すると、それらの間の距離が得られます。これらの操作は、vector が要素を連続したメモリ領域に格納しているため、高速なランダムアクセスが可能です。

main.cpp

main.cpp

copy
123456789101112131415
#include <list> #include <iostream> int main() { std::list<int> lst{1, 2, 3, 4, 5}; auto it = lst.begin(); // The following lines would cause compilation errors if uncommented: // it = it + 2; // Error: std::list iterator does not support + // int x = it[1]; // Error: std::list iterator does not support [] // auto diff = lst.end() - lst.begin(); // Error: operator- not supported std::cout << "std::list iterators do not support random access operations.\n"; }

std::vectorstd::deque のようなコンテナのみがランダムアクセスイテレータを提供します。これらのストレージは直接位置計算が可能です。vector は連続したメモリ領域により算術演算や [] 演算子をサポートしますが、std::list はリンク構造を持つためランダムアクセスをサポートしません。そのため、リストイテレータで +-[] を使用するとコンパイルエラーとなります。

question mark

どのコンテナがランダムアクセスイテレータを提供しますか?

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

すべて明確でしたか?

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

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

セクション 1.  7

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 1.  7
some-alt