자주 사용되는 것들
find, find_if
count, count_if
all_of, any_of, none_of
for_each
remove, remove_if
find: 찾으면 찾은 값의 iterator, 못찾으면 end를 반환한다.
find_if: 찾으려는 값 대신 함수 객체/함수 포인터를 인자로 넘겨준다. 함수 객체/함수 포인터가 조건이 되며 bool을 반환해 주는 형태여야 한다.
count: 찾은 값의 개수를 반환해준다.
count_if: 조건에 맞는 값 개수를 반환해준다.
셋 다 bool을 반환해준다.
all_of: 모든 데이터가 조건에 맞는가?
any_of: 조건에 맞는 데이터가 하나라도 있는가?
none_of: 모든 데이터가 조건에 맞지 않는가?
for_each: 범위 내의 모든 데이터에 대해 함수 객체/함수 포인터를 실행한다.
struct MultiplyBy3
{
void operator()(int& n)
{
n = n * 3;
}
};
for_each(v.begin(), v.end(), MultiplyBy3());
remove: 아래와 같다.
remove_if: 이름과는 달리 데이터를 실제로 지워주지는 않고 앞으로 땡겨와서 채워준다. 예를들어 값 6개중 3개가 조건에 맞았다면, 조건에 맞는 값 3개를 앞으로 땡겨오고 4번째부터는 방치가 된다.
다만 4번째 위치의 iterator가 반환이 되므로 해당 위치부터 끝까지 erase 해주면 의도하는 결과를 낼 수 있다.
auto it = remove_if(v.begin(), v.end(), IsOdd());
v.erase(it, v.end());
// 아래와 같이 한줄로 쓸수 있음
v.erase(remove_if(v.begin(), v.end(), IsOdd()), v.end());
'C++ > Rookiss C++' 카테고리의 다른 글
[Modern C++] #2 (0) | 2022.08.31 |
---|---|
[Modern C++] #1 (0) | 2022.08.31 |
[STL] set, multimap, multiset (0) | 2022.08.31 |
[STL] map (0) | 2022.08.31 |
[STL] deque (0) | 2022.08.31 |