C++의 벡터에서 요소 제거

Jinku Hu 2023년10월12일
  1. erase()메서드를 사용하여 C++의 벡터에서 요소 제거
  2. std::erase()메서드를 사용하여 C++의 벡터에서 요소 제거
  3. std::erase()std::remove()를 사용하여 C++의 벡터에서 요소 제거
C++의 벡터에서 요소 제거

이 기사에서는 C++의 벡터에서 요소를 제거하는 방법에 대한 몇 가지 방법을 설명합니다.

erase()메서드를 사용하여 C++의 벡터에서 요소 제거

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;

std::erase()메서드를 사용하여 C++의 벡터에서 요소 제거

std::erase()는 일치 할 때마다 삭제할 ​​모든 요소와 비교되는 범위와 값을 취하는 비 멤버 함수입니다. 이 메서드는 단일 요소를 제거해야하는 경우 단점이있을 수 있지만 두 번째 인수를 배열 변수 인arr[index]로 전달하여 이러한 동작을 피할 수 있습니다. 다음 예에서 보여 주듯이erasearray 요소 만 제거합니다.

#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;

std::erase()std::remove()를 사용하여 C++의 벡터에서 요소 제거

이 방법을 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

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Vector