● find()는 특정 원소를 찾는 알고리즘이며,
● find_if()는 조건에 따라 원소를 찾는 알고리즘입니다.
- vector<int>::iterator it; //반복자생성(아직 원소를 가리키지 않음) - v.begin() : 컨테이너의 시작 원소를 가리키는 반복자를 반환합니다 - v.end() : 컨테이너의 끝 표시 반복자를 반환합니다. |
- iter = find(v.begin(), v.end(), 20) : iter는 구간 [v.begin(), v.end())에서 20값을 갖는 첫번째 원소의 반복자입니다.
- iter = find_if(v.begin(), v.end(), Pred) : iter는 구간 [v.begin(), v.end)에서 단항 조건자 Pred(*p)가 참인 첫 원소의 반복자입니다.
순차열 하나에 포함되는 다른 순차열이 있는지 찾아야 한다면 find_end()와 search()알고리즘을 사용합니다. find_end()는 일치하는 순차열이 여러개라면 마지막 순차열의 반복자를 반환하며 search()는 첫번째 순차열의 반복자를 반환합니다 |
♠ 다음은 find_end() 알고리즘을 이용해 컨테이너 v1의 순차열에 v2의 순차열이 포함되는지를 판단하는 예제입니다.
- iter = find_end(v1.begin(), v1.end(), v2.begin(), v2.end()) : 구간 [v1.begin(), v1.end())의 순차열에 구간 [v2.begin(), v2.end())의 순차열이 일치하는지 판단하여 일치하는 순차열 구간이 여러 개라면 마지막 순차열의 첫 원소 반복자를 반환합니다.
iter는 v1에 v2와 일치하는 순차열 구간은 두 곳이면 이중에서 마지막 순차열의 첫 원소의 반복자입니다.
- 조건자 버전의 find_end() 알고리즘을 사용하면 원소의 비교를 사용자가 결정할 수 있습니다.
<헤더파일 쓰고 다음 예제를 입력하세요>
- iter = find_end(v1.begin(), v1.end(), v2.begin(), v2.end(), Pred) : 구간 [v1.begin(), v1.end())의 순차열과 구간 [v2.begin(), v2.end())의 순차열이 일치하는지 판단하고 일치하는 구간이 여러 개라면 마지막 순차열의 첫 원소 반복자를 반환합니다. 단, 비교는 Pred(*p, *q)를 사용합니다. p는 v1의 순차열 반복자이며 q는 v2의 순차열 반복자입니다.
- [v2.begin, v2.end())의 순차열이 [v1.begin(), v1.end())의 순차열의 원소보다 모두 크거나 같은(<=) 순차열 구간을 찾습니다. 마지막 순차열은 원소가 10, 11, 12인 순차열이므로 iter는 10을 가리키는 반복자가 됩니다.
[문제1] www.acmicpc.net/problem/2798
[문제2] www.acmicpc.net/problem/2231
[문제3] www.acmicpc.net/problem/7568
[문제4] www.acmicpc.net/problem/1018
[문제5] www.acmicpc.net/problem/1436
[문제6] www.acmicpc.net/problem/15596
[문제7] www.acmicpc.net/problem/4673 - 함수로 구현
[문제8] www.acmicpc.net/problem/1065 - 함수구현
- 재귀 함수로 구현하세요 -
[문제9] www.acmicpc.net/problem/10872
[문제10] www.acmicpc.net/problem/10870
[문제11] www.acmicpc.net/problem/2447
[문제12] www.acmicpc.net/problem/11729
'C++ STL' 카테고리의 다른 글
18. c++ STL [vector 5일차] 2차원 vector (0) | 2020.04.30 |
---|---|
17. c++ stl find_first_of() for_each() 알고리즘 (0) | 2020.04.16 |
15. c++ stl equal() (0) | 2020.04.05 |
14. c++ stl count(), count_if() (0) | 2020.04.04 |
13. c++ stl int를 string으로 변환 - to_string() (0) | 2020.04.03 |