代码:
#include <vector>
int main(void) {
vector<int> arry;
arry.push.back(1);
arry.push.back(2);
arry.push.back(3);
arry.push.back(4);
return 0;
}
如何删除arry中值为2的成员? 代码实现为:
#include <vector>
int main(void) {
vector<int> arry;
arry.push.back(1);
arry.push.back(2);
arry.push.back(3);
arry.push.back(4);
for(auto it=arry.begin(); it != arry.end();) {
if(*it == 3) {
it = arry.erase(it);
} else {
it++;
}
}
return 0;
}
为什么这样定义auto it=arry.begin()?请看另一篇博客:关于auto的自动推导的使用
arry.begin()返回一个特殊的指针,指向第一个成员!!!它是“迭代器”,不是&arry[0] arry.end()指向的不是最后一个成员,而是最后一个成员的下一个位置 erase方法,返回值也是一个迭代器,指向下一个成员
如图: 注意:it++;这条语句不能放在for语句的括号里面!即:
for(auto it=arry.begin(); it != arry.end(); it++)
原因: 假如arry[3]的值为2,删除arry[3]之后,arry.erase(it)返回的“迭代器”指向的是容器的最后一个成员的下一个,若是再执行it++,就会越界!
|