vector怎么erase多个元素
时间: 2023-10-21 16:05:35 浏览: 36
可以使用`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`函数,从而实现删除多个元素。
相关问题
std::vector 移除多个元素
可以使用 `std::remove_if` 和 `std::vector::erase` 来移除多个元素。
例如,如果我们有一个 `std::vector<int>`,想要移除所有小于 5 的元素,可以这样做:
```cpp
std::vector<int> vec = {1, 6, 2, 7, 3, 8, 4, 9, 5};
vec.erase(std::remove_if(vec.begin(), vec.end(), [](int i){ return i < 5; }), vec.end());
```
`std::remove_if` 会将满足条件的元素移到 vector 的末尾,并返回一个指向第一个被移动的元素的迭代器。然后,我们可以在 `std::vector::erase` 中使用这个迭代器和 vector 的 `end` 迭代器来移除这些元素。
vector erase cpp
vector erase是一个C++ STL库中的成员函数,用于从vector容器中删除一个或几个元素。它接受一个迭代器作为参数,指定要删除的元素的位置。如果删除的是单个元素,则返回指向被删除元素之后一个元素的迭代器。如果删除的是多个元素,则返回指向最后一个被删除元素之后一个元素的迭代器。
vector erase函数有两种重载形式,一种接受一个迭代器作为参数,用于删除单个元素;另一种接受两个迭代器作为参数,用于删除一段元素。这种情况下,第一个参数指定删除范围的起始位置,第二个参数指定删除范围的结束位置。
需要注意的是,在删除元素后,vector容器的大小会相应地减小。如果使用了auto变量存储了被删除元素的迭代器,需要注意它可能已经失效了。如果使用一个无效的迭代器访问vector的元素,会导致不可预知的结果。
vector erase函数的时间复杂度为O(n),其中n是从被删除元素到vector的末尾所需移动的元素数。因此,在删除一个大的vector容器中的元素时,需要注意效率问题。