vector中erase函数
时间: 2023-10-21 07:55:55 浏览: 138
在C++中,`std::vector`的`erase`函数用于从向量中删除一个或多个元素。`erase`函数有两种常见的用法:
1. 删除单个元素:
```cpp
std::vector<T>::iterator it = vec.begin(); // 获取要删除的元素的迭代器
vec.erase(it); // 删除指定位置的元素
```
2. 删除一个区间范围的元素:
```cpp
std::vector<T>::iterator first = vec.begin(); // 获取要删除的区间起始位置的迭代器
std::vector<T>::iterator last = vec.end(); // 获取要删除的区间结束位置的迭代器
vec.erase(first, last); // 删除指定区间范围内的元素
```
请注意,`erase`函数会改变容器的大小,并且后续的元素会向前移动以填补被删除的空缺。因此,在使用迭代器删除元素之后,需要小心处理迭代器的有效性。
如果你有特定的问题或者需要更详细的例子,请提供更多的上下文或代码,我将很乐意给出更具体的帮助。
相关问题
vector中erase函数用法
### C++ STL `vector::erase` 函数使用教程
#### 删除单个元素
当需要删除向量中的某个特定位置的元素时,可以传递一个迭代器给 `erase()` 方法。该迭代器指向要移除的元素。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 创建迭代器指向第三个元素(即值为3)
auto it = vec.begin() + 2;
// 调用 erase 移除指定位置的元素
vec.erase(it);
cout << "After erasing one element:" << endl;
for (auto i : vec) {
cout << i << ' ';
}
}
```
上述代码会输出:`After erasing one element:` 和 `1 2 4 5`[^1]。
#### 删除多个连续元素
为了移除一系列相邻的元素,可以通过提供两个迭代器来定义范围——起始位置和结束位置之后的一个位置。这类似于其他标准库算法的工作方式。
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// 定义要删除区间的边界
auto start_it = vec.begin() + 1; // 指向第二个元素(2)
auto end_it = vec.begin() + 4; // 指向第五个元素之前的位置
// 执行区间内所有元素的删除操作
vec.erase(start_it, end_it);
cout << "After erasing a range of elements:" << endl;
for (auto i : vec) {
cout << i << ' ';
}
}
```
这段程序将会打印出:`After erasing a range of elements:` 接着是 `1 5`[^3]。
请注意,在调用了 `erase()` 后,任何指向被删区域内的迭代器都将失效;因此应小心处理这些情况下的指针或引用管理问题[^2]。
vector的erase函数
vector的erase函数可以用来删除vector中的元素。它有两个重载版本:
1. erase(iterator position):删除指定位置上的元素,返回下一个元素的迭代器。
2. erase(iterator first, iterator last):删除[first,last)区间中的所有元素,返回最后一个被删除元素的下一个元素的迭代器。
例如:
```cpp
std::vector<int> v{ 1, 2, 3, 4, 5 };
v.erase(v.begin() + 2); // 删除第三个元素,即3
// 现在v为{1, 2, 4, 5}
v.erase(v.begin() + 1, v.begin() + 3); // 删除第二个和第三个元素,即2和4
// 现在v为{1, 5}
```
需要注意的是,删除元素后,vector的大小会减小,同时被删除元素之后的所有元素都会向前移动一个位置。
阅读全文