标签:迭代器
继续上一篇来说:
1.对于const_iterator来说,我们不能改变它所指向的容器的值,但是我们可以改变const_iterator本身的值。
vector<int> vec1(10,3); vector<int>::const_ieterator Myiter = vec1.begin(); *Myiter = 2; //error; const_iterator解引用之后是一个常量, ++Myiter; // ok
2.需要区别const_iterator对象和const的iterator对象。
const_iterator是指,我们不能使用const_iterator的解引用来改变容器元素的值
const的iterator对象是指:iterator对象本身不能改变,但是可以通过解引用修改iterator指向的对象的值。
vector<int> vec1; vec1.push_back(1); vec1.push_back(3); vec1.push_back(3); const vector<int>::iterator it1 = vec1.begin();//const的iterator对象一定要初始化。 ++it1; //error,const对象不能修改 *it1 = 100; //ok, it1是常量但是可以值他所指向的值进行修改。
3.迭代器的算术操作:
(1)可以对iterator对象加上或者减去n(n必须是整型值),其中n是size_type或者difference_type类型。加上n或者减去n,都必须保证运算之后的迭代器在容器返回之内,即begin()和end()函数之间。
(2)iter1 - iter2 ,该运算的结果是两个迭代器对象之间的距离。该操作的结果可能是正值,可能是负值,也可能是0。该运算的结果的类型是difference_type类型的signed类型。并且这两个迭代器对象必须指向同一个容器,也可以指向容器的末端之后的下一个元素(end()函数的返回值)。
(3)任何改变容器元素个数的操作都会使容器的迭代器失效。所以,我们一般在使用容器的时候,都是使用迭代器去判断容器是否遍历结束。不推荐使用一个整型值保存容器的长度来判断容器是否遍历结束。
本文出自 “家和万事兴” 博客,请务必保留此出处http://louis1126.blog.51cto.com/2971430/1676328
标签:迭代器
原文地址:http://louis1126.blog.51cto.com/2971430/1676328