1. 개념 정리
- 정의: unique() 함수는 C++ <algorithm> 라이브러리에 포함된 함수로, 연속된 중복 원소를 제거하는 함수이다.
- 핵심
- 연속된 중복 요소 하나만 남기고 제거
- 실제 크기 줄어들지 않음
- iterator를 반환
iterator란?: 쉽게 말하면 컨테이너(vector 등) 안의 원소 위치를 가리키는 도구
sort(v.begin(), v.end()); unique(v.begin(), v.end()); //v.begin()과 v.end()가 iterator
2. 사용방법
unique(시작iterator, 끝iterator);
unique(v.begin(),v.end());
3. 동작원리
- 입력
vector<int> v = {1,1,3,3,0,1,1}; - unique() 실행 후 (내부 상태)
{1,3,0,1, ?, ?, ?} - 특징
- 앞쪽에 중복 제거된 값 나옴
- 뒤쪽엔 의미 없는 값 남음 ? ? ?
- vector 크기는 그대로 유지 -> 의미 없는 값들이 남기 때문
- 반환값
- {1, 3, 0, 1} 다음 위치(iterator)
3. 의미 없는 값 삭제하기 위해서 사용되는 함수: erase()
위에서 이야기했듯이 unique 함수의 크기는 그대로 유지가 된다. 즉, 의미 없는 값들이 그대로 남기 때문이다. 이러한 의미 없는 값을 제거 하기 위해서 erase() 함수와 함께 사용하여 연속된 중복이 제거된 값만 반환값으로 나오게 한다.
- erase+unique 조합
v.erase(unique(v.begin(),v.end()),v.end());- 동작과정
- unique() -> 중복 제거 후 끝 위치(iterator) 반환
- erase() -> 불필요한 뒤쪽 제거
- 결과값
{1,3,0,1}
- 동작과정
4. 주의사항
- 연속된 중복만 제거
- 붙어있지 않으면 제거가 안됨vector<int>v = {1,2,1,2}; v.erase(unique(v.begin(),v.end()),v.end()); // 결과값: {1,2,1,2} 그대로 유지 - 전체에서 떨어져 있더라도 중복제거 하기 위해서는?: sort 후 erase 함수 활
5. 실행 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v = {1, 1, 3, 3, 0, 1, 1};
v.erase(unique(v.begin(), v.end()), v.end());
for (int x : v)
cout << x << " ";
return 0;
}
// 결과값: 1301
6. 최종요약
- unique() ="연속된 중복을 앞쪽으로 정리하고 끝 위치를 반환하는 함수"
- unique()는 단독으로 쓰면 거의 의미가 없고, 반드시 erase()와 함께 사용하는 것이 핵심
'언어 문법정리 > c++' 카테고리의 다른 글
| [C++] 숫자를 문자열로 변환(123 => "123") to_string() 함수 (1) | 2026.05.09 |
|---|---|
| [C++] max() 함수란? (0) | 2026.05.08 |
| [C++] 문자열 -> 숫자 변환 함수 정리 (stoi, stof, stol, stod) (1) | 2026.05.02 |
| [C++] 문자형태의 '숫자' -> 정수 숫자로 바꾸기 (’7’ → 7) (0) | 2026.05.02 |
| [C++] sort() 함수 정리 (0) | 2026.05.01 |
