C++容器的erase函数如何使用,其参数是iterator还是object
时间: 2024-01-02 21:02:39 浏览: 39
C++容器的erase函数可以接受两种参数:迭代器(iterator)和对象(object)。
当使用迭代器作为参数时,erase函数会删除指定迭代器所指向的元素,并返回一个指向被删除元素之后元素的迭代器。例如:
```
std::vector<int> vec{1, 2, 3, 4, 5};
auto it = vec.begin() + 2;
vec.erase(it); // 删除第三个元素,即3
```
当使用对象作为参数时,erase函数会删除容器中所有等于该对象的元素。例如:
```
std::vector<int> vec{1, 2, 3, 2, 4, 2};
vec.erase(2); // 删除所有等于2的元素
```
需要注意的是,如果使用对象作为参数,容器中的元素必须支持相等比较(即实现了==运算符)。否则会编译错误。
相关问题
请举一个例子说明C++ list容器使用erase函数的方法
当使用C++中的list容器时,可以使用erase函数来删除容器中的元素。erase函数有两种用法:
1. 删除单个元素
可以使用erase函数删除list容器中的单个元素,例如:
```c++
list<int> mylist = {1, 2, 3, 4, 5};
auto it = mylist.begin();
advance(it, 2); // it指向第3个元素,即3
mylist.erase(it); // 删除第3个元素
```
在上面的代码中,我们首先创建了一个包含5个整数的list容器mylist,然后使用advance函数将迭代器it指向第3个元素,最后使用erase函数删除了第3个元素。
2. 删除一段元素
除了删除单个元素外,还可以使用erase函数删除list容器中的一段元素,例如:
```c++
list<int> mylist = {1, 2, 3, 4, 5};
auto it1 = mylist.begin();
auto it2 = mylist.begin();
advance(it1, 1); // it1指向第2个元素,即2
advance(it2, 4); // it2指向第5个元素,即5
mylist.erase(it1, it2); // 删除第2个到第5个元素
```
在上面的代码中,我们首先创建了一个包含5个整数的list容器mylist,然后使用advance函数将迭代器it1指向第2个元素,将迭代器it2指向第5个元素,最后使用erase函数删除了第2个到第5个元素。
注意:在使用erase函数删除元素时,要注意迭代器的有效性,避免出现迭代器失效的情况。
请举一个例子说明C++ list容器使用erase函数的用法
C++中的list容器使用erase函数可以删除容器中指定位置或指定元素的值。例如,以下代码可以删除list容器中第二个元素:
```c++
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> mylist = {1, 2, 3, 4, 5};
auto it = mylist.begin();
advance(it, 1);
mylist.erase(it);
for (auto i : mylist) {
cout << i << " ";
}
return 0;
}
```
输出结果为:1 3 4 5
在这个例子中,我们使用了advance函数将迭代器it移动到第二个元素的位置,然后使用erase函数删除该元素。最后,我们遍历list容器并输出其余元素的值。