'C++' std::count, std::count_if

토스트·2024년 12월 25일

'C++' std::algorithm

목록 보기
2/11

count

C++ 11

template<class InputIt, class T>
typename std::iterator_traits<InputIt>::difference_type count(InputIt first, InputIt last, const T& value); // constexpr since C++ 20

C++ 17

template<class ExecutionPolicy, class ForwardIt, class T>
typename std::iterator_traits<ForwardIt>::difference_type count(ExecutionPolicy && policy, ForwardIt first, ForwardIt last, const T& value);

: 주어진 범위 내에서 특정 값이 몇 번 나타나는 지 반환합니다.

  • first : 탐색을 시작할 첫 번째 요소를 가리키는 입력 반복자 실행 정책에 따라 순방향 반복자
  • last : 탐색을 종료할 마지막 번째 요소의 다음 위치를 가리키는 입력 반복자 실행 정책에 따라 순방향 반복자
  • value : 범위 내에서 세려는 값
  • policy : 실행 정책

실행 정책은 std::execution 헤더에 포함되어있습니다.

  • execution::seq : 순차 실행 (기본 값)
  • execution::par : 병렬 실행 (멀티코어 시스템에서 작업이 병렬로 수행됩니다.)
  • execution::par_unseq : 병렬 및 비순차 실행

<example>

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5, 2};

    cout << count(vec.begin(), vec.end(), 2);
    // vec.begin() : vec의 첫 번째 요소를 가리키는 반복자를 반환합니다.
    // vec.end() : vec의 마지막 요소의 뒤를 가리키는 반복자를 반환합니다.

    return 0;
}

결과값

count_if

C++ 11

template<class InputIt, class UnaryPred>
typename std::iterator_traits<InputIt>::difference_type count(InputIt first, InputIt last, UnaryPred p); // constexpr since C++ 20

C++ 17

template<class ExecutionPolicy, class ForwardIt, class UnaryPred>
typename std::iterator_traits<ForwardIt>::difference_type count(ExecutionPolicy && policy, ForwardIt first, ForwardIt last, UnaryPred p);

: 주어진 범위 내에서 특정 조건을 만족하는 값이 몇 번 나타나는 지 반환합니다.

  • first : 탐색을 시작할 첫 번째 요소를 가리키는 입력 반복자 실행 정책에 따라 순방향 반복자
  • last : 탐색을 종료할 마지막 번째 요소의 다음 위치를 가리키는 입력 반복자 실행 정책에 따라 순방향 반복자
  • p : 범위 내의 각 요소에 대해 적용할 단항 조건식(Unary Predicate)
  • policy : 실행 정책

실행 정책은 std::execution 헤더에 포함되어있습니다.

  • execution::seq : 순차 실행 (기본 값)
  • execution::par : 병렬 실행 (멀티코어 시스템에서 작업이 병렬로 수행됩니다.)
  • execution::par_unseq : 병렬 및 비순차 실행

<example>

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5, 2};

    cout << count_if(vec.begin(), vec.end(), [](int x) { return x % 2 == 0; });

    return 0;
}

결과값

0개의 댓글