vector容器erase的用法
时间: 2024-07-10 18:01:07 浏览: 36
`std::vector` 是 C++ 标准库中的一个动态数组容器,提供了一种方便的方式来存储和操作一系列元素。`erase` 函数是 `vector` 类中的一个成员函数,用于删除指定位置或范围的元素。
`erase` 函数的常用用法有以下几种:
1. 删除单个元素:当你知道要删除的具体元素索引时,可以直接传递该索引来 `erase`,例如:
```cpp
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 2); // 删除第三个元素,此时 v 为 {1, 2, 4, 5}
```
这里的 `v.begin()` 返回向量的起始迭代器,加上特定索引后得到要删除元素的迭代器。
2. 删除连续元素:如果你要删除一个区间内的所有元素,可以传递两个迭代器,分别表示区间的开始和结束:
```cpp
std::vector<int> v = {1, 2, 3, 4, 5, 6};
v.erase(v.begin() + 1, v.begin() + 4); // 删除从第二个到第四个元素,此时 v 为 {1, 5, 6}
```
这里第一个参数是删除区间的起始位置,第二个参数是删除区间的结束位置(不包含该位置对应的元素)。
3. 使用迭代器:如果你有一个指向要删除元素的迭代器,可以使用 `std::next` 或者直接传递给 `erase` 函数:
```cpp
int* p = &v; // 指向第三个元素
v.erase(p); // 删除指向的元素
```
相关问题
c++vector容器erase的用法
c++中的vector容器提供了erase()函数来删除容器中的元素。erase()函数有多种用法,可以删除指定位置的元素,也可以删除指定范围内的元素。
以下是erase()函数的用法示例:
1. 删除指定位置的元素:
```c++
vector<int> v5 = {1, 2, 3, 4, 5};
v5.erase(v5.begin()); // 删除头部元素
```
2. 删除指定范围内的元素:
```c++
vector<int> v5 = {1, 2, 3, 4, 5};
v5.erase(v5.begin(), v5.end()-1); // 删除除最后一个元素外的所有元素
```
注意:在删除指定范围内的元素时,需要将end()迭代器减去1,以指向最后一个元素。
3. 遍历vector并计算元素的总和:
```c++
vector<int> v5 = {1, 2, 3, 4, 5};
int sum = 0;
for(vector<int>::iterator it = v5.begin(); it != v5.end(); it++){
sum += (*it);
}
cout << sum << endl; // 输出:15
```
vector容器erase
vector容器的erase函数用于删除容器中的元素。它有两种使用方式:
1. erase(iterator _First, iterator _Last):删除从_First开始到_Last位置的元素,并返回一个迭代器,指向最后一个删除元素的下一个位置。可以通过这个返回的迭代器来继续进行后续操作。
2. erase(iterator position):删除指定位置的元素,并返回一个迭代器,指向被删除元素的下一个位置。
在使用erase函数删除指定元素的过程中,需要注意迭代器的失效问题。当调用erase函数删除元素后,被删除元素的迭代器会失效,因此需要将erase的返回值赋给迭代器,以保持迭代器的有效性。可以使用循环和条件判断结合的方式,通过判断元素的值来决定是否删除元素,并更新迭代器。
以下是几种使用erase函数删除vector容器元素的示例:
1. 使用迭代器进行删除:
```cpp
vector<int> count = {0, 1, 2, 2, 2, 2, 2, 3, 4};
for(auto iter = count.begin(); iter != count.end(); ) {
if(2 == *iter) {
iter = count.erase(iter);
} else {
++iter;
}
}
```
2. 使用erase和find函数结合进行删除:
```cpp
vector<int> vec = {0, 1, 2, 2, 2, 2, 2, 3, 4};
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;
}
```
这两种方式都可以删除vector容器中指定的元素。使用erase函数时,需要根据具体的需求选择合适的方式进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [vector中erase删除元素用法及注意事项](https://blog.csdn.net/u013171226/article/details/118762113)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [【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^v92^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)
![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)