iterator和const iterator 和 const_iterator的区别

众所周知,iterator就是一个灵活的迭代器,而const iterator 和 const_iterator是啥?接下来,我来讲讲:

const iterator(const迭代器)

const迭代器,顾名思义,就是不能改变的迭代器,是常量,其性质是由const决定的。比如说我们这样定义一个const迭代器。

vector<int> vec(10,9);  
const vector<int> :: iterator iter = vec.begin();  

则,当程序中出现这样的语句时是错误的

++iter;  

其原因是iter是一个常量,因此是不能改变的。换句话说,iter只能指向vec的第一个元素,不能指向其他的元素。
但是这样的语句是正确的:

*iter = 10;  

因为虽然iter不能指向其他的元素,但是其指向的第一个元素的值是可以改变的。

**总结:**const iterator与const_iterator是不一样的:声明一个 const iterator时,必须初始化它。一旦被初始化后,只能用它来改它指的元素,不能使它重新指向其他元素。因此,const iterator几乎没任何用途。

const_iterator

而对于const_iterator来说的话,正好相反。比如我们这样定义

vector<int> vec(10,9);  
vector<int> :: const_iterator iter;  

即定义了一个const_iterator迭代器。这个迭代器是可以自己增加的,但是其所指向的元素是不可以被改变的。比如说

for(iter = vec.begin(); iter != vec.end(); ++iter){  
    cout << *iter << endl;  
}  

这样是正确的,即iter本身的值是可以改变的。但是

for(iter = vec.begin(); iter != vec.end(); ++ iter){  
   *iter = 0;  
}  

这样是不对的,因为const_iterator迭代器是不能改变其所指向的元素的值的。

总结: const_iterator经常用于定义一个迭代器,挺有用的:

vector<int>::iterator iter=nums.begin();
//或
vector<int>::const_iterator iter=nums.begin();
//或
vector<int>::const_iterator iter=nums.cbegin();

上面三种写法都OK,这说明啥?

begin()和end()的类型由定义决定,cbegin()和cend()的类型始终为const_iterator;如果使用cbegin()则必须使用const_iterator。

最后的总结:

const iterator几乎没用,忽略即可。iterator和const_iterator的作用:遍历容器内的元素,并访问这些元素的值。iterator可改自身和所指的元素值,但const_iterator可改自身但不可改所指的元素值(只读的感觉)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值