c++中vector erase用法
时间: 2024-08-12 15:01:58 浏览: 37
在 C++ 中,`std::vector` 提供了 `erase` 函数用于删除指定位置的元素。这个函数有两个版本:
1. `erase(iterator)`:接受一个迭代器作为参数,指向要删除的第一个元素。它会返回一个新的迭代器,表示删除元素后的下一个元素的位置。
```cpp
std::vector<int> v = {1, 2, 3, 4, 5};
auto it = v.erase(v.begin() + 2); // 删除第三个元素(索引从0开始)
```
在这个例子中,`it` 现在指向了被删除元素之后的新元素,即 `4`。
2. `erase(first, last)`:接受两个迭代器作为参数,分别指向要删除范围的起始元素和终止元素(但不包括终止元素)。它会删除指定范围内的所有元素,并返回新的结束迭代器。
```cpp
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 1, v.begin() + 4); // 删除第2到第4个元素(即2, 3, 4)
```
这将删除 `[2, 3, 4)` 这个区间的所有元素。
注意,`erase` 要求提供合法的迭代器,如果尝试删除超出范围的元素,或者直接传入已失效的迭代器,可能会导致未定义的行为。另外,`erase` 后的剩余元素会被移动到空出的空间,这可能会影响向量的内存布局。
相关问题
c++ vector erase用法大全
C++中的vector容器提供了erase()方法来删除元素。下面是一些c++ vector erase用法的示例:
1. 删除指定位置的元素[^1]:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(vec.begin() + 2); // 删除索引为2的元素
```
2. 删除指定范围的元素:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(vec.begin() + 1, vec.begin() + 4); // 删除索引为1到3的元素
```
3. 删除满足条件的元素[^2]:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(std::remove(vec.begin(), vec.end(), 3), vec.end()); // 删除所有值为3的元素
```
4. 删除满足条件的元素并返回删除的元素个数:
```cpp
std::vector<int> vec = {1, 2, 3, 4, 5};
int count = std::count(vec.begin(), vec.end(), 3);
vec.erase(std::remove(vec.begin(), vec.end(), 3), vec.end()); // 删除所有值为3的元素
```
这些是一些常见的c++ vector erase用法。你可以根据具体的需求选择适合的方法来删除vector中的元素。
c++中vector的erase
在C++中,vector的erase函数用于删除vector中的一个或多个元素。它接受一个迭代器参数,指定要删除的元素位置。引用和提供了错误和正确使用erase函数的示例。
在引用的错误使用示例中,使用erase函数删除了vector中等于300的元素。但是在使用erase函数之后,没有及时更新迭代器,导致迭代器指向错误的位置。正确的使用方法是在删除元素后,更新迭代器,使其指向下一个元素。
在引用的正确使用示例中,同样使用erase函数删除了vector中等于300的元素。但是在删除元素后,更新了迭代器,使其指向下一个元素。这样可以确保迭代器指向正确的位置。
因此,正确使用erase函数的步骤是:
1. 使用迭代器遍历vector中的元素。
2. 在需要删除元素的位置使用erase函数。
3. 更新迭代器,使其指向下一个元素。
请注意,在使用erase函数删除元素后,迭代器会自动指向下一个元素,所以不需要自增迭代器。
希望这可以回答你的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [【C++】vector中erase用法](https://blog.csdn.net/Vcrossover/article/details/106243627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C++之vector的erase使用](https://blog.csdn.net/sinat_31608641/article/details/108478756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]