언어/C&C++ 응용

[C++] vector iterator, unique사용

차가운오미자 2021. 9. 11. 17:53

1. iterator 사용법

vector<int> v;

1. 선언
vector<int>::iterator it;

2. 반복문에 사용하기
for(it = v.begin(); it != v.end(); it++){ //+, - 연산 가능)
	cout << *it << endl;
}

3. 임의 접근 가능
cout << iter[2] << endl;

 

2. vector 중복 제거

unique() 함수와 erase()를 사용한다. 

 

unique()

template <class ForwardIterator> ForwardIterator unique (ForwardIterator first, ForwardIterator last);

이 함수는 first 와 last 사이에 중복되는 값이 있으면 그걸 맨 뒤로 보낸다. 그리고 그 맨뒤로 보내진 애들(중복된 애들)의 맨 앞 값을 줌으로써 유효한 범위를 알려준다.

예를 들어서

1 3 3 4 5 6 6 7 이 있는 벡터를 주게 되면 1 3 4 5 6 7 3 6으로 재정렬한 후에 두 번째 3이 있는 위치를 반환한다. 

1 3 4 5 6 7 3 6

 그럼 이 반환된 iterator을 가지고 뒤에 쓰레기값들을 삭제하면 된다. 

erase()

iterator erase (iterator position);

iterator erase (iterator first, iterator last);

두 개 중에 후자는 지울 요소들 중 첫 iterator와 마지막 iterator을 줘서 둘 사이의 값들을 삭제할 수 있다. 이걸 이용하면 된다.

sort(v.begin(), v.end());
vector<int>::iterator it = unique(v.begin(), v.end());
v.erase(it, v.end());

 

'언어 > C&C++ 응용' 카테고리의 다른 글

[C++] 시간 초과 해결  (1) 2021.09.18
[C++] upper_bound, lower_bound  (0) 2021.09.11
[C] 정렬: qsort()  (0) 2021.09.07
[C++] std::sort()  (0) 2021.09.06
[C] 특수 입력  (0) 2021.08.24