Std count c что это
std :: count () в C ++ STL
std :: count () возвращает количество вхождений элемента в заданном диапазоне. Возвращает количество элементов в диапазоне [first, last), которые сравниваются равными val.
// Returns count of occurrences of value in
// range [begin, end]
int count(Iterator first, Iterator last, T &val)
first, last : Input iterators to the initial and final positions of the sequence of elements.
val : Value to match
Сложность Это порядок сложности O (n). Сравнивает один раз каждый элемент с определенным значением.
Подсчет вхождений в массиве.
// C ++ программа для подсчета в C ++ STL для
// массив
#include
using namespace std;
int n = sizeof (arr) / sizeof (arr[0]);
cout «Number of times 3 appears : «
Подсчет вхождений в векторе.
// C ++ программа для подсчета в C ++ STL для
// вектор
#include
using namespace std;
cout «Number of times 3 appears : «
Подсчет вхождений в строке.
// C ++ программа для подсчета в C ++ STL
// для строки
#include
using namespace std;
string str = «geeksforgeeks» ;
cout «Number of times ‘e’ appears : «
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Алгоритмы в Стандартной библиотеке С++
Обновл. 15 Сен 2021 |
На этом уроке мы рассмотрим использование алгоритмов из Стандартной библиотеки С++.
Библиотека алгоритмов
Новички обычно тратят довольно много времени на написание пользовательских циклов для выполнения относительно простых задач, таких как: сортировка, поиск или подсчет элементов массивов. Эти циклы могут стать проблематичными как с точки зрения того, насколько легко в них можно сделать ошибку, так и с точки зрения общей надежности и удобства использования, т.к. данные циклы могут быть трудны для понимания.
Поскольку поиск, подсчет и сортировка являются очень распространенными операциями в программировании, то в состав Стандартной библиотеки C++ изначально уже включен большой набор функций, которые выполняют данные задачи всего в несколько строчек кода. В дополнение к этому, эти функции уже предварительно протестированные, эффективные и имеют поддержку множества различных типов контейнеров. А некоторые из этих функций поддерживают и распараллеливание — возможность выделять несколько потоков ЦП для одной и той же задачи, чтобы выполнить её быстрее.
Функционал, предоставляемый библиотекой алгоритмов, обычно относится к одной из трех категорий:
Инспекторы — используются для просмотра (без изменений) данных в контейнере (например, операции поиска или подсчета элементов).
Мутаторы — используются для изменения данных в контейнере (например, операции сортировки или перестановки элементов).
Фасилитаторы — используются для генерации результата на основе значений элементов данных (например, объекты, которые умножают значения, либо объекты, которые определяют, в каком порядке пары элементов должны быть отсортированы).
Данные алгоритмы расположены в библиотеке алгоритмов (заголовочный файл algorithm). На этом уроке мы рассмотрим некоторые из наиболее распространенных алгоритмов.
Примечание: Все эти алгоритмы используют итераторы.
Алгоритм std::find() и поиск элемента по значению
Функция std::find() выполняет поиск первого вхождения заданного значения в контейнере. В качестве аргументов std::find() принимает 3 параметра:
итератор для начального элемента в последовательности;
итератор для конечного элемента в последовательности;
значение для поиска.
В результате будет возвращен итератор, указывающий на элемент с искомым значением (если он найден) или конец контейнера (если такой элемент не найден). Например:
std:: count, std:: count_if
| Compiler support | ||||
| Freestanding and hosted | ||||
| Language | ||||
| Standard library headers | ||||
| Named requirements | ||||
| Feature test macros (C++20) | ||||
| Language support library | ||||
| Concepts library (C++20) | ||||
| Diagnostics library | ||||
| General utilities library | ||||
| Strings library | ||||
| Containers library | ||||
| Iterators library | ||||
| Ranges library (C++20) | ||||
| Algorithms library | ||||
| Numerics library | ||||
| Localizations library | ||||
| Input/output library | ||||
| Filesystem library (C++17) | ||||
| Regular expressions library (C++11) | ||||
| Atomic operations library (C++11) | ||||
| Thread support library (C++11) | ||||
| Technical specifications | ||||
| Symbols index | ||||
| External libraries |
typename iterator_traits InputIt > :: difference_type
count ( InputIt first, InputIt last, const T & value ) ;
constexpr typename iterator_traits InputIt > :: difference_type
count ( InputIt first, InputIt last, const T & value ) ;
typename iterator_traits ForwardIt > :: difference_type
count ( ExecutionPolicy && policy,
ForwardIt first, ForwardIt last, const T & value ) ;
typename iterator_traits InputIt > :: difference_type
count_if ( InputIt first, InputIt last, UnaryPredicate p ) ;
constexpr typename iterator_traits InputIt > :: difference_type
count_if ( InputIt first, InputIt last, UnaryPredicate p ) ;
typename iterator_traits ForwardIt > :: difference_type
count_if ( ExecutionPolicy && policy,
ForwardIt first, ForwardIt last, UnaryPredicate p ) ;
Returns the number of elements in the range [first, last) satisfying specific criteria.
Contents
[edit] Parameters
| first, last | — | the range of elements to examine |
| value | — | the value to search for |
| policy | — | the execution policy to use. See execution policy for details. |
| p | — | unary predicate which returns true for the required elements. |
[edit] Return value
number of elements satisfying the condition.
[edit] Complexity
[edit] Exceptions
The overloads with a template parameter named ExecutionPolicy report errors as follows:
[edit] Notes
[edit] Possible implementation
See also the implementations of count in libstdc++ and libc++.
See also the implementations of count_if in libstdc++ and libc++.
Подсчет вхождений символов в строке в С++
ОТВЕТЫ
Ответ 1
Ответ 2
EDIT: код примера С++:
Также обратите внимание: я понимаю, что вы хотите что-то «как можно меньше», но я бы предложил вам использовать это решение. Как вы видите, вы можете использовать функцию для инкапсуляции кода для вас, поэтому вам не придется писать цикл for каждый раз, но можете просто использовать count_underscores(«my_string_») в остальной части вашего кода. Использование продвинутых алгоритмов на С++, конечно, возможно здесь, но я думаю, что это чрезмерно.
Ответ 3
Старомодное решение с правильно названными переменными. Это дает коду некоторый дух.
Ответ 4
Ответ 5
Вы называете это. Lambda version. )
Вам нужно несколько включений. Я оставляю вас в качестве упражнения.
Ответ 6
Как только вы узнаете, как найти следующего персонажа, заданного начальной позицией, вы постоянно продвигаете свой поиск (т.е. используете цикл), считая, когда идете.
Ответ 7
Вы можете узнать появление ‘_’ в исходной строке с помощью строковых функций. Функция find() принимает 2 аргумента, первая строка, чьи вхождения мы хотим найти, а второй аргумент принимает начальную позицию. Если цикл используется для поиска вхождения до конца строки источника.
Ответ 8
Подсчитать количество появлений символов в строке легко:
Ответ 9
Использование лямбда-функции для проверки того, что символ равен «_», будет увеличиваться только счетчик, в противном случае это недопустимый символ