const_iterator与const iterator

  1. vector<int> :: const_iterator        表明这个迭代器它自身的值可以更改(可以指向其他的元素),但是不能通过对它解引用来改变它所指向的元素的值。   如果传递过来的是一个const类型的容器,那么只能使用const_iterator来进行遍历
  2. const vector<int>::iterator      表明这个迭代器本身就是一个const类型的,当声明该类型的迭代器时,必须要同时对它进行初始化,并且一旦被初始化,该迭代器本身的值就不能改变,不过能通过对该类迭代器进行解引用来改变它所指向的元素的值。
EX:
vector<int> ive;
vector<int>::const_iterator iter1 = ive.begin();
const vector<int>::iterator iter2 = ive.begin();
iter1 = iter1 + 1;    // OK
iter2 = iter2 + 1;    //Error
*iter1 = 10;     //Error
*iter2 = 0;     //OK

const_iterator可以用于const或者是非const容器,但是都不能通过对该种容器进行解引用来改变所指元素的值。

const iterator只能用于非const容器,只能修改其唯一指向的元素的值。


C++primier上的一个例子解释:

const vector<int> nines(10, 9); 
 // nines 被定义成常量容器对象,是说它本身是一个常量容器,而不是说它的内容常量对象,里面的内容只是int变量
     
const vector<int>::iterator cit2 = nines.begin();   
// error:  cit2是常型迭代器,但是它指向的元素是int的而不是 const int 的,所以它只是迭代器本身不能修改,但能修改它所指的元素(能修改它唯一指向的元素),但 是 nines 是一个 const 类型的容器,所以会产生编译错误

vector<int>::const_iterator it = nines.begin();  
 // ok:  迭代器 it 能修改自身的值,但是不能修改它所指向的元素,所以可以用 const 类型的容器 nines 来初始化该值

*it = 10;  
// error:  它不能修改它所指向的元素的值,仅能修改本身的指向

++it;     
// OK: 能修改自己的指向,通过自加指向原先的下一存储单元

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值