c++ erase迭代器指向的多个元素怎么写
时间: 2024-03-21 21:40:47 浏览: 26
使用 `erase` 函数时,还可以传入一对迭代器,表示要删除的元素范围。具体写法如下:
```c++
container.erase(first, last);
```
其中,`container` 是容器类的对象,`first` 和 `last` 是迭代器,表示要删除的元素范围为 `[first, last)`,即包含 `first`,但不包含 `last`。
例如,如果要删除向量 `vec` 中从第三个元素开始的三个元素,可以这样写:
```c++
std::vector<int> vec = {1, 2, 3, 4, 5};
auto first = vec.begin() + 2; // 获取指向第三个元素的迭代器
auto last = first + 3; // 获取指向第六个元素的迭代器
vec.erase(first, last); // 删除第三个到第五个元素
```
注意,这里使用 `begin()` 函数获取迭代器,然后通过加上偏移量 2 获取指向第三个元素的迭代器,再通过加上偏移量 3 获取指向第六个元素的迭代器。
相关问题
C++ set 调用一次erase删除多个元素
在 C++ STL 中,set 的 erase 函数可以接受一个迭代器范围,从而一次性删除多个元素。具体使用方法如下:
```cpp
#include <set>
int main() {
std::set<int> mySet = {1, 2, 3, 4, 5};
// 删除元素值在 [2, 4) 范围内的所有元素
mySet.erase(mySet.lower_bound(2), mySet.upper_bound(4));
return 0;
}
```
在上述代码中,使用 lower_bound 和 upper_bound 函数获取了两个迭代器,这两个迭代器分别指向了值为 2 和 4 的元素位置。将这两个迭代器作为参数传递给 erase 函数,就可以删除这个范围内的所有元素。
注意,erase 函数删除元素后,被删除元素的迭代器都会失效,因此在使用迭代器时需要格外小心。
vector怎么erase多个元素
可以使用`erase`结合`std::remove_if`来实现删除多个元素,具体方法如下:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
v.erase(std::remove_if(v.begin(), v.end(), [](int i) { return i%2 == 0; }), v.end());
// 删除所有偶数,结果为 1 3 5 7 9
for (int i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
在上面的例子中,`std::remove_if`返回的是一个指向最后一个未删除元素之后的迭代器,然后将这个迭代器和`end()`作为参数传递给`erase`函数,从而实现删除多个元素。