자주 사용되는 것들

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

+ Recent posts