-
[c++] unique 함수Programming/c++ 2022. 8. 1. 22:47728x90
unique 함수
: 지정된 범위에서 서로 옆에 있는 중복 요소를 제거합니다.
1.함수 헤더 파일
#include <algorithm>
2.함수 원형
template<class ForwardIterator> ForwardIterator unique( ForwardIterator first, ForwardIterator last); template<class ForwardIterator, class BinaryPredicate> ForwardIterator unique( ForwardIterator first, ForwardIterator last, BinaryPredicate pred); template<class ExecutionPolicy, class ForwardIterator> ForwardIterator unique( ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last); template<class ExecutionPolicy, class ForwardIterator, class BinaryPredicate> ForwardIterator unique( ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, BinaryPredicate pred);
3.매개 변수(Parameter)
- exec : 사용할 실행 정책
- first : 중복 제거를 위해 검색할 범위에서 첫 번째 요소 위치의 주소를 지정하는 forward iterator
- last : 중복 제거를 위해 검색할 범위에서 마지막 요소 다음 위치의 주소를 지정하는 forward iterator
- pred : 두 요소가 같은 것으로 간주되려면 충족해야 하는 조건을 정의하는 사용자 정의 조건자 함수 개체 (return true, false)
4.return 값(반환 값)
연속 중복 항목을 포함하지 않는 수정된 시퀀스의 새로운 끝에 대한 forward iterator,
마지막 요소 다음 위치의 주소
4.예제
#include <iostream> #include <string> #include <algorithm> #include <vector> int main(){ // 1 vector<int> test = { 1,1,3,3,0,1,1 }; vector<int>::iterator iter = unique(test.begin(), test.end()); // 1 3 0 1 x x x test.resize(distance(test.begin(), iter)); // 1 3 0 1 for (iter = test.begin(); iter != test.end(); ++iter) { cout << ' ' << *iter; } cout << '\n'; //2 vector<int> test3 = { 1,1,3,3,0,1,1 }; auto iter2 = unique(test3.begin(), test3.end()); test3.erase(iter2, test3.end()); return 0; }
예제 설명
vector<int>::iterator iter = unique(test.begin(), test.end()); // 1 3 0 1 x x x
연속으로 중복된 요소가 발견되면 벡터의 맨 뒤로 보내버림(가비지 값으로)
가비지 값으로 가지고 있으니 test 벡터의 크기는 동일하다. 삭제Xtest.resize(distance(test.begin(), iter)); // 1 3 0 1
distance는 두 반복자의 거리를 반환해준다.
iter 반복자는 unique함수의 결과 값이 저장되어 있다.( 수정된 시퀀스의 마지막 요소의 다음 주소)
resize로 test 벡터의 크기를 다시 지정한다.
vector<int> test3 = { 1,1,3,3,0,1,1 }; auto iter2 = unique(test3.begin(), test3.end()); test3.erase(iter2, test3.end()); // 1 3 0 1
iter2(수정된 시퀀스의 마지막 요소 다음 위치)부터 test2 벡터의 마지막 요소는
중복된 요소로 맨 뒤로 보내진 가비지 값이다.
erase함수를 사용하여 가비지 값들을 삭제한다.
위 코드를 아래와 같이 사용할 수 있다.
vector<int> test3 = { 1,1,3,3,0,1,1 }; test3.erase(unique(test3.begin(), test3.end()), test3.end());
참고 문서
728x90'Programming > c++' 카테고리의 다른 글
[c++] std::max_element , std::min_element 함수 (0) 2022.09.16 [c++] lower_bound, upper_bound 함수 (0) 2022.09.15 [c++] std::accumulate 함수 vector sum (0) 2022.07.16 [c++] Visual Studio Code c++ 설정 (0) 2022.06.26 [c++] isdigit() 함수 (0) 2022.05.28