STL中 const_iterator 和 const vector<T>::iterator的区别
const_iterator 类似我们指针里的const int *p;即指针指向的内容不能改变。
以vector为例:
const vector<T>::iterator 则类似于int * const p;即指针为常量,内容容许改变。
我们看下面这个例子:
- #include <iostream>
- #include <vector>
- using namespace std;
- int main()
- {
- int a[] = {3,5,6,7,8,9};
- vector<int> vec(a,a+6);
- const vector<int>::iterator it = vec.begin();
- while (it != vec.end())
- {
- cout << *it << endl;
- ++it;//error
- }
- return 0;
- }
由于我们定义的是const vector<int>::iterator it,所以迭代器it是常量,即不允许改变它的指向。
若我们将程序改变如下:
- int a[] = {3,5,6,7,8,9};
- vector<int> vec(a,a+6);
- const vector<int>::iterator it = vec.begin();
- cout << *it << endl;
- *it = 1;
- cout << *it << endl;
则可以正确执行。说明const vector<int>::iterator 类似于我们指针里的
int * const p;
我们再来看一下const_iterator:
还是基于以上两个程序:
若我们写成这样:
- int a[] = {3,5,6,7,8,9};
- vector<int> vec(a,a+6);
- vector<int>::const_iterator it = vec.begin();
- cout << *it << endl;
- *it = 1;//error
- cout << *it << endl;
*it = 1;引起了错误,这就说明const_iterator是不容许改变它所指向的值的。
那么可向而知,如下程序就可以成功执行了:
- int a[] = {3,5,6,7,8,9};
- vector<int> vec(a,a+6);
- vector<int>::const_iterator it = vec.begin();
- while (it != vec.end())
- {
- cout << *it << endl;
- ++it;
- }
这里理解了const_iterator 和 vector<T>::iterator的区别.我想什么时候该用哪个,大家心里都有数了吧..呵呵!一起学习,一起努力!