c++ vector erase()
时间: 2023-10-14 07:30:24 浏览: 38
`vector::erase()` 函数是用来删除 vector 容器中一个或一段元素的。它有两种重载形式:
1. `iterator erase (const_iterator position)`:删除指定位置的元素,返回下一个元素的迭代器。
2. `iterator erase (const_iterator first, const_iterator last)`:删除指定范围内的元素,返回下一个元素的迭代器。
示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
// 删除第3个元素
v.erase(v.begin() + 2);
// 删除第2到第4个元素
v.erase(v.begin() + 1, v.begin() + 4);
for (auto i : v) {
cout << i << " ";
}
cout << endl;
return 0;
}
```
输出:
```
1
```
相关问题
c++ vector erase
在C++中,使用std::vector::erase()方法可以实际删除容器vector中的元素。 下面是一个示例代码,演示了如何使用erase()方法删除vector中的元素:
```cpp
#include <iostream>
#include <vector>
using namespace std;
#### 引用[.reference_title]
- *1* *2* *3* [c++ vector erase用法](https://blog.csdn.net/u013654125/article/details/77321081)[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: 100%"]
[ .reference_list ]
C++ vector erase
在C++中,vector的erase函数用于删除vector中的一个或多个元素。其语法为:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
第一种使用方式是删除指定位置的元素,指定的位置由参数position确定。该函数返回一个指向被删除元素之后元素的迭代器。
第二种使用方式是删除[first, last)范围内的所有元素,其中first和last是两个迭代器,分别指向要删除的范围的第一个元素和最后一个元素的下一个位置。该函数返回一个指向被删除元素之后元素的迭代器。
需要注意的是,在使用erase函数删除元素后,要小心迭代器的更新问题。删除一个元素后,迭代器会失效,所以在继续使用迭代器之前,要先更新迭代器。
对于上述提供的代码,其中的错误是在使用erase函数后未更新迭代器,导致迭代器指向了已删除元素的位置,产生了野指针的问题。正确的做法是在调用erase函数后,将迭代器更新为erase函数返回的新的迭代器。
引用中的代码漏掉了返回结果,并且在迭代器更新时没有进行自增操作,导致死循环。正确的代码应该修改为:
vector<int> fun(vector<int>& vec) {
vector<int> temp;
for(auto iter=vec.begin(); iter!=vec.end(); ) {
auto iter1=find(vec.begin(),iter,*iter);
if(iter==iter1) {
temp.push_back(*iter);
iter = vec.erase(iter);
} else {
++iter;
}
}
return temp;
}
引用中指出了代码存在的问题,即在erase后未更新迭代器的状态,导致出现野指针的错误。
引用中提供了一个错误的使用实例,其中的for循环中,在使用erase函数删除元素后,未更新迭代器的状态,导致迭代器指向已删除元素的位置。正确的做法是在调用erase函数后,将迭代器更新为erase函数返回的新的迭代器,可以通过将它赋值给迭代器来实现。
综上所述,C++中的vector erase函数用于删除vector中的元素,但需要注意更新迭代器的状态,以避免出现野指针的错误。<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_1"}}] [.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_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)