リストを最後から最初まで表示したいと思います。お気に入り:
for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)
問題は、最初の要素 ( ) にあるときに入力されないことですlist.begin()
。これどうやってするの?
rbeginとrendを使用して、逆イテレータを取得します。
for (std::list<...>::reverse_iterator it=list.rbegin(); it!=list.rend(); ++it)
逆イテレータを使用します。
for (std::list<...>::const_reverse_iterator it = l.rbegin(); it != l.rend(); ++it)
C ++ 11
for (auto it = l.crbegin(); it != l.crend(); ++it)
std::list<T>
インスタンスに名前を付けないでくださいlist
。
逆イテレータが必要です。rbegin
およびを参照してくださいrend
。
追加:それは=>ポインタ[メモリのいくつかのブロック]を取得するためですit = list.end();
。これは「終了」(または停止する場所、右または左の境界)として理解されます。その内容を出力すると (cout<<*it)、メモリ[ブロック] アドレスが表示されます。次のように宣言して使用する場合:
std::list<...>::const_iterator it = list.begin();
std::list<...>::const_iterator iTail = list.end();
while(it!=iTail)
{
//do smthing
++it;
}
ループがスキップされるか、ヒープからガベージが取得されます。その const_iterator のケース (ドキュメントを読んでいませんでしたが、明らかに「書き込み」保護のためです)。イテレータの場合、最後の [要素] => [終了]std::list<...>::iterator
のみ.end()
を指します。場合:
std::list<...>::const_reverse_iterator および std::list<...>::reverse_iterator
リストを実行するstart => end
かどうかに応じて、イテレータは自動的に最初の要素に移動します。end =>start