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

更新於:2020年3月2日

981 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告