【发布时间】:2013-03-18 13:53:53
【问题描述】:
我想从头到尾显示我的列表。喜欢:
for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)
问题是它在第一个元素(list.begin())时没有进入。我该怎么做?
【问题讨论】:
-
它没有进入因为
list.end()不在你的列表中。
我想从头到尾显示我的列表。喜欢:
for (std::list<T>::const_iterator it = list.end(); it != list.begin(); --it)
问题是它在第一个元素(list.begin())时没有进入。我该怎么做?
【问题讨论】:
list.end()不在你的列表中。
使用 rbegin 和 rend 获取反向迭代器。
for (std::list<...>::reverse_iterator it=list.rbegin(); it!=list.rend(); ++it)
【讨论】:
auto:for( auto it=list.rend(); it!=list.rbegn(); ++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(第一个元素),对吧?你的答案倒过来了。
你想要一个reverse iterator。请参阅rbegin 和rend。
【讨论】:
补充:因为在it = list.end(); 中它得到=> 指针[一些内存块],它被理解为“结束”(或指向停止的位置,右边界或左边界)。所以输出它的内容 (cout
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] => [end]。情况:
std::list<...>::const_reverse_iterator 和 std::list<...>::reverse_iterator
迭代器自动移动到第一个元素,具体取决于您将要遍历列表的start => end 或end =>start。
【讨论】: