您的位置:首页 > 其它

vector容器中iterator的使用

2017-07-24 15:43 211 查看
问题

vector <int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
for(vector<int>::size_type i=array.size()-1;i>=0;i--)
{
cout<<array[i]<<endll;
}


该代码是错误的,for循环是错误的。

正确的应该为

for(vector<int>::size_type i = array.size();i>0;i--)
{
cout<<array[i-1]<<endl;
}


分析

前者通过查看源码发现,在vector的定义中,

typedef A::size_type size_type;
而_A是allocator<_Ty>,所以查看allocator的定义发现,
typedef _SIZT size_type;
而 _SIZT的定义为:
#define _SIZT size_t
typedef unsigned int size_t;


所以size_type是个无符号类型的。而无符号类型的整数永远都大于等于0的。所以前者的for循环没有限制条件,程序一直运行下去,直到程序奔溃。而后者的for循环有限制条件,当i= 0 时程序结束循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: