ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [35] - count, all, none_of
    Graphics 2021. 8. 9. 22:16

     

    이들에 대해 간략하게 알아봅니다. 

    std::count

    위와 같은 형식을 취합니다. 기능은 어떤 척도에 맞는, 특정 범위의 Container 속에 포함된 원소들의 개수를 구합니다. 코드를 조금 써보는 것이 좋겠습니다. 복잡하지도 않고 유용합니다.

    벡터 a에는 총 세 개의 2가 있습니다. 그러면 결과는 3이 나와야 합니다. 실제로 코드를 실행하면 3이 나옵니다.

    이것보다 훨씬 복잡한 것도 가능할 겁니다. 가령, 단순히 2를 세는 것이 아니라 3보다 크거나 같은 값을 찾아서 출력하는 것도 가능할 것입니다. 왜냐하면 count의 overload function 중에서 (3)번을 보면 마지막 parameter에 UnaryPredicate를 넣을 수 있기 때문입니다. Lambda를 이용하면 될 것 같습니다. 7개가 나오면 정상입니다.

    Lambda expression은 전에 했습니다. 예상한 대로 7이 잘 나와주었습니다. Pred에 직접 function literal로 넣어줘도 됩니다.

    std::all_of, std::any_of, std::none_of

    사용법과 설명이 자세히 나와 있습니다. 바로 예제를 통해서 이해하면 좋을 듯 합니다.

     

    공통적으로 predicate를 parameter로 사용하고 임의의 범위에 대해서 참인지 아닌지 판단합니다. all_of는 모두 참이면 true, any_of는 하나라도 참이면 true, none_of는 아무것도 해당하지 않아야 true를 반환합니다. 아까 만들어 놓은 Pred1을 사용하면 좋을 것입니다.

    이 함수를 보면 이전에 어떤 문자열 내에 알파벳 'e'또는 'E'가 있으면 벡터에서 제거하던 함수를 다른 방식으로 구현할 수 있게 됩니다. 이전의 구현은 문자열의 시작부터 끝까지 확인하여 e의 개수가 0인지 아닌지 확인했으나 저 세 개의 함수 중 하나를 사용하면 끝까지 검증하지 않아도 함수를 마칠 수 있게 됩니다. 

    이전에 했던 remove_if와 같은 결과를 얻을 수 있지만 수 백만, 수 천만에 이르는 방대한 양의 정보에 대해서 더 빠르게 결과를 얻을 수 있습니다. 

    'Graphics' 카테고리의 다른 글

    [37] - Generators  (0) 2021.08.10
    [36] - find, search, reverse iterators  (0) 2021.08.10
    [34] - Transform, For_each  (0) 2021.08.09
    [33] - Remove_if  (0) 2021.08.09
    [32] - Copy and Filter  (0) 2021.08.09
Designed by Tistory.