Использование std::begin и std::end с указателями
Хочу суммировать значения элементов перечислителя, использую стандартные функции std::begin и std::end. Знаю, что перечислители не очень подходят для этой задачи, но захотелось поэкспериментировать, при этом используя std::begin и std::end.
Следующий код работает корректно:
#include <iostream>
#include <algorithm>
enum ItemType {
health_potion = 3,
torches = 6,
arrows = 12
};
int main()
{
ItemType my_item[3]{health_potion,torches,arrows};
int count = 0;
for (auto it = std::begin(my_item); it != std::end(my_item); ++it) {
std::cout << *it << std::endl;
count += *it;
}
std::cout << "Count=" << count << std::endl;
return 0;
}
А этот нет, да и понятно почему: для указателей стандартные функции std::begin и std::end не определены.
#include <iostream>
#include <algorithm>
enum ItemType {
health_potion = 3,
torches = 6,
arrows = 12
};
void countTotalItems(const ItemType *my_type);
int main()
{
ItemType my_item[3]{health_potion,torches,arrows};
countTotalItems(my_item);
return 0;
}
void countTotalItems(const ItemType *my_type) {
int count = 0;
int i = 0;
for (auto it = std::begin(my_type); it != std::end(my_type+i); ++it) {
++i;
std::cout << *it << std::endl;
count += *it;
}
std::cout << "Count=" << count << std::endl;
}
Ошибка: "E0304 отсутствуют экземпляры перегруженная функция "std::begin" и "std::end", соответствующие списку аргументов"
Можно ли как-нибудь определить эту функцию по-другому, чтобы она работала?