Использование 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", соответствующие списку аргументов"

Можно ли как-нибудь определить эту функцию по-другому, чтобы она работала?


Ответы (0 шт):