Возможный дубликат:
Взять адрес элемента массива «один за другим» через индекс: допустимый по стандарту C ++ или нет?
В стандартной библиотеке C ++ многие алгоритмы begin()
а также end()
итератор в качестве аргумента. Но дело в том, что end()
Итератор после конца контейнера. Если я хочу применить алгоритмы к стандартному c-массиву, я должен передать эквивалент begin()
а также end()
указатели.
Вопрос в следующем:
const unsigned int size = 10;
int array[size];
std::iota(&array[0], &array[size], 0); // <- Version 1
std::iota(&array[0], &array[0]+size, 0); // <- Version 2
Эти две версии строго эквивалентны? Могу ли я без проблем использовать версию 1 согласно стандарту C ++?
Мои сомнения связаны с тем, что &array[size]
получить доступ к элементу после конца массива, а затем получить его адрес, тогда как &array[0]+size
не получить доступ к элементу после конца массива.
Просто используйте std::begin
а также std::end
от <iterator>
и не волнуйтесь — они поступят правильно. 🙂
Других решений пока нет …