vector的erase
时间: 2023-08-26 12:16:21 浏览: 112
vector的erase函数是用来从vector中删除指定元素或一定范围的元素的。
它有两种使用方式:
1. 删除单个元素:
```cpp
vector<int> nums = {1, 2, 3, 4, 5};
nums.erase(nums.begin() + 2); // 删除索引为2的元素,即3
```
2. 删除一定范围的元素:
```cpp
vector<int> nums = {1, 2, 3, 4, 5};
nums.erase(nums.begin() + 1, nums.begin() + 4); // 删除索引为1到3之间的元素,即2、3、4
```
注意:erase函数会改变vector的大小,删除元素后,后面的元素会向前移动填补空位。
此外,还有一种更高效的删除方式是使用remove-erase惯用法,可以将需要删除的元素移到容器末尾,并使用erase函数删除末尾的元素。这样可以减少移动元素的次数,提高效率。示例如下:
```cpp
vector<int> nums = {1, 2, 3, 4, 5};
nums.erase(remove(nums.begin(), nums.end(), 3), nums.end()); // 删除所有值为3的元素
```
这样,所有值为3的元素会被移到末尾,再使用erase函数删除末尾的元素,即可完成删除操作。
相关问题
vector erase
vector erase 是 C++ STL 中 vector 容器的一个成员函数,用于删除 vector 中的元素。它有两种形式:
1. iterator erase(iterator position);
这种形式接受一个迭代器参数 position,表示要删除的元素的位置。该函数返回一个迭代器,指向被删除元素的下一个元素。
例如:
```
std::vector<int> vec{1, 2, 3, 4, 5};
auto it = vec.erase(vec.begin() + 2);
// 删除第三个元素,即数字3
// vec 变成{1, 2, 4, 5}
// it 指向数字4
```
2. iterator erase(iterator first, iterator last);
这种形式接受两个迭代器参数 first 和 last,表示要删除元素的范围。该函数返回一个迭代器,指向被删除元素的下一个元素。
例如:
```
std::vector<int> vec{1, 2, 3, 4, 5};
auto it = vec.erase(vec.begin() + 1, vec.begin() + 4);
// 删除第二个到第四个元素,即数字2、3、4
// vec 变成{1, 5}
// it 指向数字5
```
注意:
- erase 函数会改变 vector 的大小,因此要注意迭代器的失效问题;
- 对于使用 erase 删除元素的操作,最好使用迭代器而不是下标,因为 erase 操作可能会导致迭代器失效,而下标则不会。
vector vector erase
`vector` 是 C++ 标准库中的容器,提供了动态数组的功能。`erase` 是 `vector` 容器中的一个成员函数,用于删除容器中的元素。
`erase` 函数有两种用法:
1. 删除单个元素:`vec.erase(iterator)`,其中 `vec` 是要操作的 `vector` 容器,`iterator` 是指向要删除元素的迭代器。
例如,删除 `vec` 中第一个元素可以使用 `vec.erase(vec.begin())`。
2. 删除一定范围内的元素:`vec.erase(startIterator, endIterator)`,其中 `startIterator` 和 `endIterator` 分别是指向要删除范围起始位置和结束位置的迭代器。
例如,删除 `vec` 中从第二个元素到第四个元素的范围可以使用 `vec.erase(vec.begin() + 1, vec.begin() + 4)`。
需要注意的是,使用 `erase` 函数后,被删除元素之后的所有元素都会向前移动,所以迭代器也会失效。一般情况下,在使用 `erase` 函数后应该更新迭代器,以免出现错误。
希望这个解答能够帮到你!如果还有其他问题,请随时提问。
阅读全文