我想从头到尾显示我的列表。像:
for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)
问题是当它位于第一个元素(list.begin()
)时它不会进入。我怎么能这样做?
答案 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。请参阅rbegin
和rend
。
答案 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 => end
或end =>start
。