C++ STL 中的 list erase() 函数
在本文中,我们将讨论 C++ 中 list::erase() 函数的工作原理、语法和示例。
什么是 STL 中的 List?
List 是一种数据结构,允许在序列中的任何位置进行恒定时间的插入和删除操作。List 使用双向链表实现。List 允许非连续内存分配。与数组、向量和双端队列相比,List 在容器的任何位置执行元素的插入、提取和移动操作的效率更高。在 List 中,直接访问元素的速度较慢,并且 List 与 forward_list 类似,但 forward_list 对象是单向链表,只能向前迭代。
什么是 list::erase()?
list::erase() 是 C++ STL 中一个内置函数,在头文件中声明。erase() 用于从 list 容器中删除元素。我们可以从 list 容器中删除单个元素或一系列元素。它通过要删除/擦除的元素数量来减小 list 容器的大小。
语法
list_container.erase(positon); list_container.erase(start_position, end_position);
此函数可以接受一个或两个参数:
参数
position - 这是我们要从中删除元素的单个位置。
start_position, end_position - 这定义了我们要从中删除元素的范围。
返回值
此函数返回一个迭代器,该迭代器指向最后一个被删除元素的下一个元素。
示例
在下面的代码中,我们要使用 STL 中的 erase() 函数删除元素,为此,我们将使用 begin() 函数获取指向第一个元素的迭代器来获取第一个元素,然后我们将删除包含列表第一个元素的迭代器。
#include <bits/stdc++.h>
using namespace std;
int main(){
//Create a list
list<int> myList;
myList.push_back(2);
myList.push_back(4);
myList.push_back(6);
myList.push_back(8);
myList.push_back(10);
cout<<"List before deleting elements: ";
for (auto i = myList.begin(); i!= myList.end(); i++){
cout << *i<< " ";
}
//iterator that will point to the first element
list<int>::iterator i = myList.begin();
myList.erase(i);
//list after deleting the element
cout << "\nList after deleting elements: ";
for (auto i = myList.begin(); i!= myList.end(); i++){
cout << *i << " ";
}
return 0;
}输出
如果我们运行上面的代码,它将生成以下输出
List before deleting elements: 2 4 6 8 10 List after deleting elements: 4 6 8 10
示例
在下面的代码中,我们要使用 STL 中的 erase() 函数删除元素,为此,我们将使用 begin() 函数获取指向第一个元素的迭代器 (迭代器 1),并将另一个迭代器 (迭代器 2) 指向第二个元素,然后我们将删除迭代器 1 和迭代器 2 之间的范围内的迭代器,并显示结果。
#include <bits/stdc++.h>
using namespace std;
int main(){
//Create a list
list<int> myList;
myList.push_back(2);
myList.push_back(4);
myList.push_back(6);
myList.push_back(8);
myList.push_back(10);
cout<<"List before deleting elements: ";
for (auto i = myList.begin(); i!= myList.end(); i++){
cout << *i << " ";
}
//iterator that will point to the first element
list<int>::iterator i_1, i_2;
i_1 = myList.begin();
i_2 = myList.begin();
//advance() function will increment the position of iterator 2 by 3
advance(i_2, 4);
//now it will delete the elements from the range 0 - 4
myList.erase(i_1, i_2);
//list after deleting the element
cout<< "\nList after deleting elements: ";
for (auto i = myList.begin(); i!= myList.end(); i++){
cout << *i << " ";
}
return 0;
}输出
如果我们运行上面的代码,它将生成以下输出
List before deleting elements: 2 4 6 8 10 List after deleting elements: 10
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP