【发布时间】:2015-12-03 18:24:00
【问题描述】:
为什么指向列表开头的迭代器输出第二个值?为什么 a.begin()++ 将 begin() 提前,有更好的实现方式吗?
#include <iostream>
#include <list>
using namespace std;
//3,2,1
int main() {
list<int> a;
a.insert(a.begin(),1);
cout << *(a.begin()) << endl;
a.insert(a.begin(),3);
cout << *a.begin()<< endl;
a.insert(a.begin()++,2);
list<int>::iterator iterator = a.begin();
iterator++;
cout << *iterator << endl;
return 0;
}
我的输出:
1
3
3
预期输出:
1
3
2
编辑: “因为您将 2 放在列表的开头。请记住,a.begin()++ 正在执行后递增,即,它在所有其他操作之后递增。使用 ++a.begin() 尝试您的代码,看看它是否做你所期望的”-@Ben
排版错误,谢谢 Ben。
【问题讨论】:
-
我使用 gcc 和 VS 编译器得到了你预期的输出。
-
如果您使用
++it而不是it++(即前缀增量运算符),这就是我所期望的行为。也许后缀运算符的实现存在错误?distance(a.begin(), a.begin()++)是什么? -
@ateneaMinerva 如果确实如此,那么它可能是库的错误。
-
等待:您的主题说“输出包含 2”,这就是您声称的预期输出!?哪个是对的?
-
In your last edit,很明显你的输出是应该的,因为你已经将
iterator推进到包含2的元素之后。我投票结束这个问题。