迭代器 iterator, const_iterator, const iteratorspa
迭代器iterator的做用相似于指针。指针
(1)iterator只有针对制定<类型>的容器才有效。例如:code
vector<int> vec; vector<int>::iterator itr;
对于vec来讲,itr.begin()指向的是vec的第一个元素。Itr.end()指向的是vec的最后一个元素的下一个元素(做为哨兵,实际不存在)。可用itr.begin() == itr.end()来判断容器是否为空。blog
像指针同样,itr能够++,*itr表示解引用,即表示容器内被itr指向的元素。it
(2)const_iterator为一种迭代器,这种迭代器能够读取其指向的内容,也能够自增,可是不能够对其指向的内容进行“写“操做。class
例如:容器
vector<int>::const_iterator constItr = vec.begin(); cout<< *constItr << endl; //正确 constItr++;//正确 *constItr = 10;//错误!
另外,因为const_iterator只可读取其指向的内容,因此能够用const_iterator做为const 的 容器的迭代器。迭代器
(3)容易混淆的 由const 修饰符修饰的iterator引用
其几乎无做用。di
与普通的iterator同样,其能够解引用,并能够修改其指向的内容。但迭代器自己不可被修改,由于它由const修饰。
因此该iterator不能自增,其只能为第一次赋予的值,故并没有明显的做用。
P.S:合法的指针运算: