У вас ряд проблем. Это l oop:
for (int i = x.begin(); i < x.size(); i++)
неверно. begin()
возвращает итератор, а не индекс.
Также это условие:
if (x % 2 == 1)
неверно, поскольку x
- это передаваемый диапазон, а не отдельные элементы.
Самый простой способ сделать это:
template<typename T>
void countOdd(T const & range)
{
int count = 0;
for (auto const &element : range)
if (element % 2 != 0)
count++;
cout << count;
}
Начиная с C ++ 20, вы можете уменьшить шаблон для шаблона и написать:
void countOdd(auto const & range)
{
int count = 0;
for (auto const &element : range)
if (element % 2 != 0)
count++;
cout << count;
}
И, наконец, , вы должны использовать соответствующий алгоритм, чтобы вы могли:
void countOdd(auto const & range)
{
cout << std::count_if(std::begin(range), std::end(range),
[](auto element) { return element % 2 != 0; });
}