vector迭代器使用几点注意及分析

示例程序

vector<int> vec;
 for(int i=0; i<10; ++i)
 {
  vec.push_back(i);
 }

 vector<int>::iterator ite = vec.begin();

printf("ite的值为%d/n", ite);

for(; ite != vec.end(); ++ite)
 {
  printf("ite:%d..", ite);
  cout<<"vec:"<<*ite<<endl;
 }

程序运行结果如下图:

 

可以看出,ite的值很奇怪。目前我还无法解释

 

总结:

1,大部分标准容器都定义了相应的迭代器,所以c语言中循环常用的下标操作在c++中最好改为迭代器操作

2, 用vec.begin()来初始化,用vec.end()来判断结束,并且是‘ite != vec.end()’,用‘!=’来判断。

3,用指针解引用来读写元素,*vec;

4,ite+n, ite-n  , ite01 - ite02都是正确的操作

但是ite.begin()+ite.end()会报错。即迭代器不能互相相加。

5, cout<<ite<<endl; 该语句会报错:error C2679: 二进制“<<”: 没有找到接受“std::_Vector_iterator<_Ty,_Alloc>”类型的右操作数的运算符(或没有可接受的转换)

     所以在示例程序中,我用了‘printf("ite的值为%d/n", ite);’来打印ite的值。

    留下几点疑问等高人指点:

                      1 为什么ite的值没有变化?

                      2 ite是指针吗?如果不是,为何可以做指针解引用运算?

                      3 ite的值肯定是发生变化了,否则ite != vec.end()的判断就没有意义了。但是,ite != vec.end()的判断机理又是怎么回事?

 

令 ite = vec.end();

     ite++;

程序编译正常,但是运行时会报错:error C2679: 二进制“<<”: 没有找到接受“std::_Vector_iterator<_Ty,_Alloc>”类型的右操作数的运算符(或没有可接受的转换)。不过,必须记住的是:对end()的返回值,不能做指针解引用或自增操作!

 

  注:本程序在windows xp下,vs2005,c++。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值