在C ++ STL中列出delete()函数

在本文中,我们将讨论C ++中list::erase()函数的工作原理,语法和示例。

什么是STL中的列表?

列表是一种数据结构,允许按时间顺序在任意位置进行插入和删除。列表被实现为双向链接列表。列表允许非连续的内存分配。与数组,向量和双端队列相比,列表在容器中的任何位置执行元素的插入提取和移动效果更好。在列表中,对元素的直接访问很慢,并且列表类似于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-这定义了我们要从中删除元素的范围。

返回值

此函数返回一个迭代器,该迭代器将下一个指向要删除的最后一个元素。

示例

在下面的代码中,我们必须使用erase()STL中存在的函数擦除元素,为此,我们将使用迭代器获取第一个元素,该迭代器将使用begin()function指向第一个元素,然后我们将擦除包含第一个元素的迭代器列表中。

#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

示例

在下面的代码中,我们必须使用erase()STL中存在的函数来擦除元素,为此,我们将使用迭代器(迭代器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);
   //范围内的元素
   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