◐ Shell
clean mode source ↗

std::count, std::count_if – cppreference.com

Aus cppreference.com

<tbody> </tbody>

definiert in Header

<algorithm>

template< class InputIt, class T > typename iterator_traits<InputIt>::difference_type count( InputIt first, InputIt last, const T &value );

(1)

template< class InputIt, class UnaryPredicate > typename iterator_traits<InputIt>::difference_type count_if( InputIt first, InputIt last, UnaryPredicate p );

(2)

Gibt die Anzahl der Elemente im Bereich [first, last) erfüllen bestimmte Kriterien. Die erste Version zählt die Elemente, die gleich value sind, zählt die zweite Version Elemente, für die Prädikats p kehrt true .

Parameter

first, last - das Spektrum der Elemente zu untersuchen
value - der Wert für die Suche
p - unary predicate which returns ​true für die erforderlichen Elemente.

The signature of the predicate function should be equivalent to the following:

bool pred(const Type &a);

The signature does not need to have const &, but the function must not modify the objects passed to it.
The type Type must be such that an object of type InputIt can be dereferenced and then implicitly converted to Type. ​

Type requirements
-InputIt must meet the requirements of InputIterator.

Rückgabewert

Anzahl der Elemente, die der Bedingung entsprechen.

Komplexität

genau last - first Vergleiche / Anwendungen des Prädikats.

Mögliche Implementierung

First version
template<class InputIt, class T>
typename iterator_traits<InputIt>::difference_type
    count(InputIt first, InputIt last, const T& value)
{
    typename iterator_traits<InputIt>::difference_type ret = 0;
    for (; first != last; ++first) {
        if (*first == value) {
            ret++;
        }
    }
    return ret;
}
Second version
template<class InputIt, class UnaryPredicate>
typename iterator_traits<InputIt>::difference_type
    count_if(InputIt first, InputIt last, UnaryPredicate p)
{
    typename iterator_traits<InputIt>::difference_type ret = 0;
    for (; first != last; ++first) {
        if (p(*first)) {
            ret++;
        }
    }
    return ret;
}

Beispiel

Der folgende Code verwendet count um zu bestimmen, wie viele Zahlen in einem std::vector mit einem Zielwert übereinstimmen.

Original:

The following code uses count to determine how many integers in a std::vector match a target value.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
{
    int data[] = { 1, 2, 3, 4, 4, 3, 7, 8, 9, 10 };
    std::vector<int> v(data, data+10);
 
    int target1 = 3;
    int target2 = 5;
    int num_items1 = std::count(v.begin(), v.end(), target1);
    int num_items2 = std::count(v.begin(), v.end(), target2);
 
    std::cout << "number: " << target1 << " count: " << num_items1 << '\n';
    std::cout << "number: " << target2 << " count: " << num_items2 << '\n';
}

Output:

number: 3 count: 2
number: 5 count: 0

Dieses Beispiel verwendet einen Lambda-Ausdruck, um die durch 3 teilbaren Elemente zu zählen.

Original:

This example uses a Lambda-Ausdruck to count elements divisible by 3.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#include <algorithm>
#include <iostream>
#include <vector>
 
int main()
{
    int data[] = { 1, 2, 3, 4, 4, 3, 7, 8, 9, 10 };
    std::vector<int> v(data, data+10);
 
    int num_items1 = std::count_if(v.begin(), v.end(), [](int i) {return i % 3 == 0;});
 
    std::cout << "number divisible by three: " << num_items1 << '\n';
}

Output:

number divisible by three: 3