質問: ### 前提 std::listにおいて、指定したindexに要素にアクセスする際に適切な記述の仕方がわかりません。 ``` std::list lst{1,2,3,4,5,6,7,8,9}; // 1と表示される std::cout << *(lst.begin()) << std::endl; // でも、次のはエラー std::cout << *(lst.begin()+2) << std::endl; ``` どのように記述すればよいのでしょうか?
回答: iteratorを使って回数分移動するしかありません。 これを変わりにしてくれるものに`std::advance`があります。 ``` UINT index; auto it = lst.begin(); // このようにする for (int i=0; i < index; ++i) { it++; } // 代わりに以下のようにかけます。 std::advance(it, index); ``` forループにせよadvanceにせよ単純にiteratorをインクリメントするだけなので インデックスアクセスで範囲外を参照しないようにsizeと事前に比較しておいてください。 ``` if (lst.size() <= index) return; ``` 見ての通りlistにおける要素の取得は高コストです。 ランダムアクセスを主目的とする場合はvector等別のコンテナを使った方がいいでしょう。 基本的には編集可能なqueueと思って使用するのがベターです。