迭代器原理
包装的智能指针,重载了operator * operator->
迭代器的使用
1. 遍历容器
vector<int> vi = {1,2,3,4,5};
vector<int>::iterator itr;
for(itr = vi.begin();itr != vi.end();++itr) {
cout<<*itr<<endl;
}
2. 迭代器作为索引插入或者删除元素时,需谨慎使用,避免迭代器失效
实例
例:在vector下标为0或者偶数时插入元素10
分析:
insert 做参数范围值,指向新插入的元素
Only the first version returns a value, which is an iterator that points to the newly inserted element.
若 itr+1后,itr指向100,再itr++, itr指向为1 ,则重复循环操作,程序挂掉
所以使用迭代器时要注意。
代码实现:
vector<int> vi = {1,2,3,4,5};
vector<int>::iterator itr;
for(itr = vi.begin();itr != vi.end();) {
if((*itr)%2) {
itr = vi.insert(itr,100);
itr += 2; // itr +2 的原因为 若itr+1后指向1,则由循环,itr+1后又指向1
}
else {
++itr;
}
}
for(auto &i:vi)
cout<<i<<endl;
运行结果:
100
1
2
100
3
4
100
5