При использовании "sizeof trick" никогда не обрабатывается на std::vector
.
Размер std::vector
объекта равен размеру std::vector
сам объект, а не возможные данные, обрабатываемые вектором.
Если вы хотите получить число элементов из объекта std::vector
, используйте функцию-член size
.
«Уловка sizeof» работает только с реальными массивами, например,
int array[10];
std::cout << sizeof(array) / sizeof(array[0]) << '\n'; // Will print 10
Что касается проблемы, которую вы пытаетесь решить с помощью своей функции, то здесь гораздо лучше Способы обработки итераторы
for (auto i = ar.begin(); i != ar.end(); ++i)
sum += *i;
Тогда у вас есть на основе диапазона for
петель
for (auto value : ar)
sum += value;
Наконец вы можете использовать стандартную функцию алгоритма как std::accumulate
int simpleArraySum(std::vector<int> const& ar)
{
return std::accumulate(begin(ar), end(ar), 0);
}