代码:
#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);
//arry.begin()返回一个特殊的指针,指向第一个成员!!!它是“迭代器”,不是&arry[0]
//arry.end()指向的不是最后一个成员,而是最后一个成员的下一个位置
for(auto it=arry.begin(); it != arry.end();) {
if(*it == 3) {
//erase方法,返回值也是一个迭代器,指向下一个成员
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++,就会越界!