Является ли & amp; массив [размер] совершенно безопасным?

Возможный дубликат:
Взять адрес элемента массива «один за другим» через индекс: допустимый по стандарту 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 не получить доступ к элементу после конца массива.

2

Решение

Просто используйте std::begin а также std::end от <iterator> и не волнуйтесь — они поступят правильно. 🙂

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]