vector에서 원소 하나를 삭제하는 시간복잡도는 O(N)이다.
값으로 삭제
vector<> v; 라고 선언된 벡터에서 특정한 원소를 지울 때 아래와 같이 할 수 있습니다.
v.erase(remove(v.begin(), v.end(), 지우고 싶은 원소), v.end());
remove는 특정 값을 찾아서 완전히 지우는 것이 아닌, 벡터의 뒤로 보내기 때문에 추가로 erase를 해줘야 한다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 5, 10};
cout << "원래 배열 : ";
for (auto i : v) cout << i << " ";
cout << endl;
v.erase(remove(v.begin(), v.end(), 3), v.end()); // 원소 3 지우기
cout << "지운 후 : ";
for (auto i : v) cout << i << " ";
}
조건문으로 삭제
조건문을 걸어 조건문에 해당하는 원소들을 지울 때는 remove_if를 이용하면 됩니다.
remove_if의 세번째 인자에는 함수가 들어가기 때문에 람다 함수를 이용하면 편하게 사용할 수 있습니다.
vector<int> v = {1, 2, 3, 3, 4};
v.erase(remove_if(v.begin(), v.end(), [](auto x) -> bool { return x >= 3; }), v.end());
for (auto x : v) cout << x << " ";
# 출력값 : 1 2
인덱스로 삭제
인덱스로 지우고 싶을 때는 아래와 같이 지울 수 있습니다.
v.erase(v.begin() + idx)
'C++' 카테고리의 다른 글
[C/C++] Sequencing (Sequence Point) (0) | 2022.05.01 |
---|---|
[C/C++] printf에 float만을 위한 변환 명세가 없는 이유 (0) | 2022.04.28 |
[C++] lower_bound vs upper_bound (0) | 2021.10.15 |
[C++] string split구현 (0) | 2021.09.11 |
[C++] Structured binding (0) | 2021.07.21 |