본문 바로가기
프로그래밍 언어/C++

STL 알고리즘 / find, find_if, any_of, all_of

by Nighthom 2023. 2. 14.

1. find

template <class InputIt, class T>
InputIt find(InputIt first, InputIt last, const T& value)

위처럼 생긴 함수다. 해당 함수는 단순무식하게 first 이터레이터부터 last 이터레이터까지를 순회하며 value에 해당하는 값을 발견하면 해당 value의 iterator를 리턴한다. 만약 발견하지 못했다면 last에 해당하는 iterator를 반환한다. 

std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);

find(vec.begin(), vec.end(), 3);	// 3을 가리키는 iterator return
find(vec.begin(), vec.end(), 3); 	// last에 해당하는 iterator vec.end() return.

내부적으로 비교에 == 연산자를 활용한다. 

2. find_if

find_if는 find처럼 앞에서부터 탐색하고, value 대신 조건에 사용할 함수 객체/함수 포인터를 파라미터로 받는다. 

find_if(vec.begin(), vec.end(), 
[](int num) { return num > 2 };		// 이러면 2보다 높은 수 하나를 찾아서 리턴한다.

3. any_of

any_of는 iterator 앞에서부터 뒤까지 쭉 탐색하면서 조건에 맞는 원소가 하나 이상 발견될 경우 true를 리턴하는 함수다.

any_of(vec.begin(), vec.end(), [](int i) { return i % 2 == 0; });
// 짝수인 수가 하나라도 발견되면 true 리턴

3. all_of

all_of는 iterator 앞에서부터 뒤까지 쭉 탐색하면서 모든 원소가 조건에 맞는 경우 true를 리턴한다.

all_of(vec.begin(), vec.end(), [](int i) { return i % 2 == 1; }
// 모든 원소가 홀수면 true 리턴

댓글