const_iterator与const iterator

来源:互联网 发布:年轻人社交软件 编辑:程序博客网 时间:2024/05/08 05:39

  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;    // OKiter2 = 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 0
原创粉丝点击