Инициализация вектора с использованием массива

0

мы можем инициализировать вектор, используя массив. предположим,

int a[]={1,2,3}
vector<int>x(a,a+3)

это путь. Мой вопрос: что такое a и a+3 здесь, они указатели?

и кто-то может это объяснить: для вышеупомянутого массива

vector<int>x(a,&a[3])

также не дает ошибок и делает то же самое, что и код выше. Если мы пишем [3], он должен быть вне массива? может кто-нибудь сказать мне внутренний механизм?

Теги:
arrays
vector

4 ответа

3
Лучший ответ

Да, a и a+3 - указатели. Обычная a - это массив, который неявно преобразуется в указатель при падении шляпы.

Конструкция &a[3] идентична по значению a+3 для простых C-массивов. Да, a[3] находится вне массива, но одно прошлое разрешено указывать, если вы не разыгрываете его.

0

int a [] = {1,2,3}

vectorx (а, а + 3)

a - массив, поэтому он всегда указывает на его базовый адрес. a + 3 средняя база address+ (sizeof (int) * 3)

предположим, что базовый адрес равен 100 а = 100; а + 3 = 106;

0

vectorx (а, & а [3])

Здесь & a [3] эквивалентно a + 3

0

Конструктор векторного диапазона выглядит так:

template <class InputIterator>
         vector (InputIterator first, InputIterator last,
                 const allocator_type& alloc = allocator_type());

Он будет создавать элементы в диапазоне [first, last), что означает, что последний элемент не включен. &a[3] указывает на элемент вне границ массива, аналогично тому, как std::end(a) будет указывать один за концом a. Сравните это с:

std::vector<int> x(std::begin(a), std::end(a));

Кроме того, *(a + 3) эквивалентно a[3].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню