std::vector的erase用法
时间: 2024-05-03 22:15:54 浏览: 8
std::vector::erase是用于删除vector中的元素的函数。它有两种重载形式,一种是删除指定位置的元素,另一种是删除指定范围内的元素。具体用法如下:
1. 删除指定位置的元素
vector.erase(iterator pos);
其中pos为指向要删除元素的迭代器。
2. 删除指定范围内的元素
vector.erase(iterator first, iterator last);
其中first和last分别为指向要删除范围的起始和结束迭代器。
需要注意的是,使用erase函数删除元素后,原来在删除元素后面的元素会自动向前移动填补删除元素的空缺。此外,如果需要在删除元素后保持vector的容量不变,可以使用vector::swap技巧来达到目的。
相关问题
std::vector的erase方法如何使用
std::vector的erase方法用于从向量中删除一个或多个元素。它有两种重载形式:
1. erase(iterator position):删除指定位置的元素。
2. erase(iterator first, iterator last):删除指定范围内的元素,包括first和last。
其中,iterator是指向vector中元素的迭代器,position表示要删除的元素的位置,first和last表示要删除的范围。
下面是使用示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 删除指定位置的元素
vec.erase(vec.begin() + 2); // 删除第3个元素,即3
// 删除指定范围内的元素
vec.erase(vec.begin(), vec.begin() + 2); // 删除前两个元素,即1和2
// 输出剩余的元素
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:4 5
在std::vector<std::vector<int>>删除某些std::vector<int>
在std::vector<std::vector<int>>中删除某些std::vector<int>可以使用erase-remove idiom的方法。这个方法结合了erase和remove两个函数,可以高效地删除指定的元素。
以下是删除某些std::vector<int>的步骤:
1. 使用std::remove_if函数结合lambda表达式来标记要删除的std::vector<int>。lambda表达式可以根据特定的条件来判断是否需要删除。
2. 使用std::erase函数将被标记为删除的std::vector<int>从std::vector<std::vector<int>>中移除。
下面是示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<std::vector<int>> vecOfVec = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
// 删除满足条件的std::vector<int>
vecOfVec.erase(std::remove_if(vecOfVec.begin(), vecOfVec.end(), [](const std::vector<int>& vec) {
// 根据特定条件判断是否需要删除
return vec.size() == 3; // 删除长度为3的std::vector<int>
}), vecOfVec.end());
// 输出结果
for (const auto& vec : vecOfVec) {
for (const auto& num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
}
return 0;
}
```
输出结果:
```
4 5 6
7 8 9
```