C++
- 2 ответа
- 0 вопросов
1
Вклад в тег
std::vector
- достаточно хитрая структура, использующая непрерывные блоки памяти для реализации "динамического" массива. Сам объект хранит в себе 2 различных размера - capacity
(вместимость) и непосредственно size
. Последний численно равен количеству добавленных Вами элементов, а вот с capacity
дела обстоят чуточку сложнее.capacity
вдвое каждый раз, когда размер массива переваливает за его вместимость. Структура ищет в памяти блок, размер которого равен 2 * capacity
и объявляет его занятым, после чего перемещает всю информацию туда. Поскольку массив хранится на непрерывном участке памяти, то к нему вполне применима адресная арифметика, то есть расстояние от первого элемента вектора до i-ого равно sizeof(datatype) * i
. Именно благодаря этому доступ к произвольному элементу осуществляется за константное время.