C ++ - 如何遍历从头到尾的列表?

时间:2013-03-18 13:53:53

标签: c++ list for-loop stl

我想从头到尾显示我的列表。像:

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

问题是当它位于第一个元素(list.begin())时它不会进入。我怎么能这样做?

4 个答案:

答案 0 :(得分:19)

使用rbegin和rend获取反向迭代器。

for (std::list<...>::reverse_iterator it=list.rbegin(); it!=list.rend(); ++it)

答案 1 :(得分: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命名。

答案 2 :(得分:1)

你想要一个reverse iterator。请参阅rbeginrend

答案 3 :(得分:0)

添加:因为在it = list.end();中获取=&gt;指针[某个内存块],被理解为“结束”(或指向停止的位置,右边界或左边界)。因此输出其内容(cout&lt;&lt; * it)您将看到内存[block]地址。如果您声明并使用如下:

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()指向 last [element] =&gt; [结束]。在案件中:

  

std :: list&lt; ...&gt; :: const_reverse_iterator和std :: list&lt; ...&gt; :: reverse_iterator

迭代器会自动转移到第一个元素,具体取决于您要通过列表运行的start => endend =>start