遍历删除删除std::vector成员
时间: 2023-08-01 16:10:28 浏览: 141
浅谈c++ vector和map的遍历和删除对象
在遍历std::vector时,如果想要删除其中的元素,可以使用std::vector的erase()函数。但是需要注意的是,使用erase()函数删除元素时,会使迭代器失效,因此需要使用正确的方法来遍历std::vector并删除其中的元素。
一种方法是使用while循环遍历,以及使用迭代器来删除元素。具体实现如下:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = vec.begin();
while (it != vec.end()) {
if (*it == 3) {
it = vec.erase(it); // 删除元素并返回下一个元素的迭代器
} else {
++it; // 迭代器指向下一个元素
}
}
```
另一种方法是使用for循环倒序遍历std::vector,以及使用迭代器来删除元素。具体实现如下:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
if (*it == 3) {
vec.erase(std::next(it).base()); // 删除元素
}
}
```
这里使用了std::reverse_iterator来倒序遍历std::vector,std::next()函数返回的是迭代器的下一个元素的迭代器,std::next(it).base()返回的是迭代器的底层迭代器,即可用于erase()函数。
阅读全文