Нужно сделать шаблонную функцию с поведением std::count
есть задание написать шаблонную функцию, которая будет вести себя как std::count. Я читал пример реализации в документации, но это не совсем то, нужно что-то попроще.
template <typename T, typename U>
void cot(T t, T t1, U u){
int counter = 0;
std::vector<U>arr;
for (; t !=t1 ; ++t) {
if(u == t){
counter++;
}
}
}
Получилось что-то такое, но в if выдает ошибку. T в шаблоне должен принимать два итератора(на конце и начало), а U это искомое значение.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Да куда проще-то, чем приведенный пример реализации
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;
}
Ну плюньте на возвращаемый тип, сделав его просто int... Вот, в ваших обозначениях:
template<class InputIt, class T>
int count(InputIt t, InputIt t1, const T& u)
{
int counter = 0;
for (; t != t1; ++t) {
if (*t == u) {
counter++;
}
}
return counter;
}
P.S. Если не секрет - а зачем вы воткнули в свою функцию вектор?...