C++ STL 中的 list erasing() 函数

c++server side programmingprogramming

本文将讨论 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

相关文章