벡터의 중복되는 원소 제거하기

2023. 2. 7. 01:24c++

728x90

erase함수와 unique 함수를 사용하여 제거한다. 

 

1. unique 함수

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

unique 함수만 사용했을 때

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

'c++' 카테고리의 다른 글

문자열 입력 받기  (0) 2023.03.11
찾으려는 key 값보다 같거나 큰 숫자가 몇 번째에서 처음 등장하는지 찾기  (0) 2023.02.07
iterator 반복자 사용  (0) 2022.12.28
sort () 함수  (0) 2022.12.26
반복문으로 별찍기  (0) 2022.12.20