如何在 C++ 中刪除向量中的元素

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用 erase() 方法從向量中刪除元素
  2. 在 C++ 中使用 std::erase() 方法從向量中刪除元素
  3. 在 C++ 中使用 std::erase()std::remove() 從向量中刪除元素
如何在 C++ 中刪除向量中的元素

本文將介紹幾種在 C++ 中從向量中刪除元素的方法。

在 C++ 中使用 erase() 方法從向量中刪除元素

erase() 方法是 std::vector 類的一個成員函式,能夠處理向量的單個元素或指定為 [first, last] 的範圍。該函式返回最後刪除元素之後的迭代器。如果刪除的是單個元素,如下面的程式碼示例所示,傳遞的迭代器必須是可去引用的。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", "vector", "deque", "list",     "set",
                            "map",   "stack",  "queue", "multimap", "span"};
  PrintVec(str_vec);

  // DELETE element "set"
  auto elem_to_remove = str_vec.begin() + 4;
  if (elem_to_remove != str_vec.end()) {
    str_vec.erase(elem_to_remove);
  }

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

輸出:

array; vector; deque; list; set; map; stack; queue; multimap; span;
array; vector; deque; list; map; stack; queue; multimap; span;

在 C++ 中使用 std::erase() 方法從向量中刪除元素

這個 std::erase() 是一個非成員函式,每次匹配時都會取範圍和與每個元素比較的值進行刪除。當需要刪除單個元素時,這種方法可能會有一個缺點,但你可以通過陣列變數傳遞第二個引數-arr[index] 來避免這種行為。正如下一個例子所演示的那樣,erase 只刪除 array 元素。

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"array", "vector", "deque", "list",     "set",
                            "map",   "stack",  "queue", "multimap", "span"};

  PrintVec(str_vec);

  // DELETE elemen "array"
  erase(str_vec, str_vec[0]);

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

輸出:

array; vector; deque; list; set; map; stack; queue; multimap; span;
vector; deque; list; set; map; stack; queue; multimap; span;

在 C++ 中使用 std::erase()std::remove() 從向量中刪除元素

這個方法被稱為 Erase-remove 術語,它從給定的範圍內刪除每一個等於某個值或滿足某個條件的元素。請注意,這個解決方案有一些特殊的功能,比如-它不能用於返回 const_iterator 的容器。

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::erase;
using std::string;
using std::vector;

void PrintVec(vector<string> &vec) {
  for (const auto &item : vec) {
    cout << item << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec = {"map", "vector", "deque", "list", "set",
                            "map", "stack",  "queue", "map",  "span"};

  PrintVec(str_vec);

  // DELETES all elements with value "map"
  str_vec.erase(std::remove(str_vec.begin(), str_vec.end(), "map"),
                str_vec.end());

  PrintVec(str_vec);
  return EXIT_SUCCESS;
}

輸出:

map; vector; deque; list; set; map; stack; queue; map; span;
vector; deque; list; set; stack; queue; span;
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Vector