c++
벡터의 중복되는 원소 제거하기
재히hj
2023. 2. 7. 01:24
728x90
erase함수와 unique 함수를 사용하여 제거한다.
1. unique 함수
- algorithm 헤더파일에 존재한다.
- 중복되는 원소들은 제거해 나가며 앞에서부터 원소들로 벡터를 구성한다.
- unique 함수만 사용하면 중복된 원소들이 제거되지만 뒤의 인덱스엔 기존 원소들이 그대로 있기 때문에 erase 함수와 같이 사용해야 한다.
- n개의 원소에 대한 unique 함수의 시간복잡도는 O(n)이다.
std::v.unique(v.begin(),v.end());

2. erase 함수
std::v.erase(v.begin()+5); //5번째 인덱스를 지우고 싶을 때
3. unique함수와 erase 함수를 같이 사용하기
std::v.erase(unique(v.begin(),v.end()), v.end());

코테 풀이하다가 알게된 새로운 사실..
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
int main() {
vector <int> a={1,1,2,3,3,1};
a.erase(unique(a.begin(),a.end()),a.end());
for(int i:a){
cout<<i<<endl;
}
}
중복된 원소가 제거 된다고 해서 마지막 1도 지워지는 줄 알았다.
그러나 아니다.
연속된 중복된 원소만 제거되는 것이었다!!!!!
728x90