首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向后迭代QList

向后迭代QList
EN

Stack Overflow用户
提问于 2013-05-08 21:01:21
回答 2查看 8.7K关注 0票数 4

如果我执行以下代码:

代码语言:javascript
复制
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;
}

我得到以下输出:

代码语言:javascript
复制
17
4
3
2

我已经通过使用QListIterator<int>解决了这个问题,但是我真的不明白为什么它不能工作!

先谢谢你...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-08 21:24:24

谢谢你的帮助,我不知道end()没有指向最后一个元素。因此,在使用节点值之前,只需递减即可。

代码语言:javascript
复制
while(lI != l.constBegin()) {
  --lI;
  std::cout << *lI << std::endl;
}
票数 11
EN

Stack Overflow用户

发布于 2013-05-08 21:03:35

试一试

代码语言:javascript
复制
lI = l.constEnd() - 1;

我不确定这是否解决了你的问题,但据我所知,结束迭代器总是指向容器结束后的一个地方。

我只是想在评论中解决你的担忧。执行此操作时:

代码语言:javascript
复制
lI = l.constEnd();

while(lI != l.constBegin()) {
  std::cout << *lI << std::endl;
  --lI;
}

从容器的末尾开始,循环永远不会到达constBegin。这是因为当您递减时,lI变为constBegin,而while循环不会执行。(这就是1永远不会输出的原因。)

但如果你这样做了:

代码语言:javascript
复制
lI = l.constBegin();

while(lI != l.constEnd()) {
  std::cout << *lI << std::endl;
  ++lI;
}

同样的事情也会发生,只不过循环一旦到达constEnd就会终止。从逻辑上讲,这是有道理的,就好像constEnd没有指向容器的末尾一样,它会切断并不输出4。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16441447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档