转:http://zhanghu-hs.blog.sohu.com/129119232.html
vector<int>::const_itertor; //容器是常量
const vector<int>::itertor; // 迭代器是常量
const_vector类型只能用于读取容器内元素,但不能改变其值。当我们对const_iterator类型解引用时,得到一个指向const对象的引用,该对象不能进行重写。使用const_iterator类型时可以得到一个迭代器,它自身的值可以改变,但不能用来改变其所指向的元素的值。可以对迭代器进行自增以及使用解引用操作符来读取值,但不能对该元素赋值:
const vector<int> nines(10,9);
// 不可改变nines中元素的值
const vector<int>::iterator cit2=nines.begin();
/* cit2自身是const型的,它指向nines后便不能再指向其它vector,但cit2可以改变其所指向元素的值,而nines为const型迭代器,其元素的值是不可改变的,所以该赋值错误。*/
vector<int>::const_iterator it=nines.begin();
// nines元素的值是不可改变的,因此用const_iterator类型的vector指向其元素是合适的。
*it=10;
// 错误。it自身的值是不可改变的,这样也就保证了nines元素中的值不会改变
++it;
//正确。it可以改变其指向,其最大优点就是该指针的只读性,它保证了其所指向元素的不可修改性。
声明一个const迭代器时必须对其初始化,初始化后再不允许改变它的值(不能再指向其它元素)。