3

リストを最後から最初まで表示したいと思います。お気に入り:

for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)

問題は、最初の要素 ( ) にあるときに入力されないことですlist.begin()。これどうやってするの?

4

4 に答える 4

20

rbeginとrendを使用して、逆イテレータを取得します。

for (std::list<...>::reverse_iterator it=list.rbegin(); it!=list.rend(); ++it)
于 2013-03-18T13:55:20.057 に答える
5

逆イテレータを使用します。

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

于 2013-03-18T13:56:06.623 に答える
1

逆イテレータが必要です。rbeginおよびを参照してくださいrend

于 2013-03-18T13:56:24.233 に答える
0

追加:それは=>ポインタ[メモリのいくつかのブロック]を取得するためです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

于 2014-03-17T20:52:21.380 に答える