#include<bits/stdc++.h>
#define MAX 20
using namespace std;
int main()
{
//Creating a vector
vector <int> v;
std::vector<int>::iterator vIterator;
int i;
for(i=1;i<MAX;i++)
{
v.push_back(i);
}
cout<<"Numbers:"<<endl;
for(vIterator = v.end();vIterator>v.begin();vIterator--)
{
cout<<*vIterator<<endl;
}
int el_count = v.size();
cout<<"Size="<<el_count;
return 0;
}
这里是代码的输出:
编号: 0 19 18 17 16 15 14 13 12 11 10 9 8 7 6 五 4 3 2 大小= 19
为什么我会得到这个&#34; 0&#34;在开始时? 为什么我的列表以2开头?
答案 0 :(得分:1)
这是因为向量的索引范围是从v.begin()
到v.end()-1
。您改为使用v.begin()+1
到v.end()
。
循环中的语句应为
for(vIterator = v.end()-1; vIterator>=v.begin(); --vIterator)
访问v.end()
将是未定义的行为,这里给出0,显然你正在跳过第一个元素。
编辑:(感谢@Revolver_Ocelot)
从注释中可以看出,在最后一次迭代中,当调用vIterator=v.begin()
,然后调用vIterator--
时,迭代器指向的位置将导致未定义的行为。这是因为当vIterator>=v.begin()
减少到vIterator
以下时v.begin()
可能会或可能不会。另一种选择可能是,
for(vIterator = v.end()-1; vIterator>v.begin(); --vIterator)
{
cout<<*vIterator<<endl;
}
cout<<*vIterator<<endl;
另一种方法是使用反向迭代器,
std::vector<int>::reverse_iterator vIterator;
for(vIterator = v.rbegin(); vIterator!=v.rend(); ++vIterator)