如果我执行以下代码:
QList<int> l;
QList<int>::const_iterator lI;
l.append(1);
l.append(2);
l.append(3);
l.append(4);
lI = l.constEnd();
while(lI != l.constBegin()) {
std::cout << *lI << std::endl;
--lI;
}
我得到了这个输出:
17
4
3
2
我已经使用QListIterator<int>
解决了它,但我真的不明白为什么这不起作用!
提前致谢...
答案 0 :(得分:7)
尝试
lI = l.constEnd() - 1;
我不确定这是否能解决您的问题,但据我所知,结束迭代器始终指向容器末尾的一个。
我只想在评论中解决您的疑虑。当你这样做时:
lI = l.constEnd();
while(lI != l.constBegin()) {
std::cout << *lI << std::endl;
--lI;
}
从容器的末尾开始,循环永远不会到达constBegin
。那是因为当您递减时,lI
变为constBegin
并且while循环不会执行。 (这就是为什么1永远不输出的原因。)
但如果你这样做:
lI = l.constBegin();
while(lI != l.constEnd()) {
std::cout << *lI << std::endl;
++lI;
}
同样的事情发生了,除了循环到达constEnd
后终止。逻辑上它是有道理的,好像constEnd
没有指向容器的末尾,它会切断而不输出4.
答案 1 :(得分:5)
感谢您的帮助,我不知道end()没有指向最后一个元素。因此,您只需在使用节点值之前递减。
while(lI != l.constBegin()) {
--lI;
std::cout << *lI << std::endl;
}