私はちょうどstd::list
クラスのC++について気付いたことがあります。私は好奇心が強いです。簡単に言うと、リストのイテレータが動作する方法に関係します。次のコードを考えてみましょう:標準テンプレートライブラリリスト - 二重リンクまたは循環リンクされていますか?
std::list<int> alist;
alist.push_back(0);
alist.push_back(1);
alist.push_back(2);
明らかに、これで3つの整数要素を持つリストが作成されます。私は、リストの先頭にイテレータを定義し、以下のように、たとえば、最初の要素に含まれる値をプリントアウトするためにそれを使用することができます:私は穏やかに奇妙見つける何
std::list<int>::iterator iter = alist.begin();
std::cout << *iter << std::endl; // Prints "0" to stdout
で、もし私は今デクリメントイテレータは、それは「周りのループ」と、リストの最後の要素を指して終わる:
--iter;
std::cout << *iter << std::endl; // Prints "2" to stdout
はおそらく二重リンクリストとして実装されています何かのために、この合理的な行動ですか?リストが循環的にリンクリストであった場合、私はイテレータと同様の動作を期待していますが、これはかなり奇妙です。
過去に使用したこのイテレーターの振る舞いには、実用的な用途はありますか?この行動に関連する問題がありますか?
は(ちなみに、これはGCC 4.7.0(MinGWの)で発生します。私は他のバージョンやコンパイラでそれをテストしていません。)
それは私のために-1218668059を印刷しますhttp://ideone.com/3kpQf –