C++ STL 中的 list erasing() 函数
本文将讨论 C++ 中 list::erase() 函数的工作原理、语法和示例。
STL 中的 List 是什么?
List 是一种数据结构,允许在任意位置按顺序进行常数时间的插入和删除操作。List 实现为双向链表。List 允许非连续的内存分配。List 在容器中插入、提取和移动元素到任意位置的性能优于数组、向量和双端队列。在 List 中,直接访问元素速度较慢,并且 List 与 forward_list 类似,但 Forward List 对象是单链表,只能向前迭代。
什么是 list::erase()?
list::erase() 是 C++ STL 中的一个内置函数,在头文件中声明。erase() 用于从列表容器中删除元素。我们可以从列表容器中删除单个元素或某个范围的元素。它会将列表容器的大小减少要移除/擦除的元素数量。
语法
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(){ //创建列表 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<< & " & "; } //指向第一个元素的迭代器 list<int>::iterator i = myList.begin(); myList.erase(i); //删除元素后的列表 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() 函数来擦除元素。为此,我们将使用迭代器(迭代器 1)获取第一个元素,该迭代器将使用 begin() 函数指向第一个元素,然后我们将使用另一个迭代器(迭代器 2)指向第二个元素,之后我们将从迭代器 1 和迭代器 2 之间的范围内擦除迭代器并显示结果。
#include <bits/stdc++.h> using namespace std; int main(){ //创建列表 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 << " "; } //指向第一个元素的迭代器 list<int>::iterator i_1, i_2; i_1 = myList.begin(); i_2 = myList.begin(); //advance() 函数将迭代器 2 的位置递增 3 advance(i_2, 4); //现在它将删除 0 - 4 范围内的元素 myList.erase(i_1, i_2); //删除元素后的列表 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