Я понимаю, что набор размера вектора векторов во время выполнения
описывает, можно объявить вектор вектора как
vector<vector<int> > ref;
затем измените размер первого уровня на
ref.resize(i);
и элемент push на 2-м уровне:
ref[i].push_back(23);
Но как вектор вектора выравнивается в памяти?
Для простого вектора это контейнер, и его элемент непрерывно выравнивается, как array
; но в случае вектора вектора я не мог видеть изображение.
Поскольку размер каждого внутреннего вектора ( вектор в векторе вектора ) size может измениться, внешний вектор вектора ( вектор в векторе вектора) постоянно выравнивает внутренние векторы? Исследует ли внешний вектор пространство памяти для каждого внутреннего вектора? что делать, если один вектор выходит за пределы?
Решение проблемы
Размер vector<int>
сохраняемой структуры ref
является постоянным. Общие реализации имеют это как три указателя, или около 12 байтов в 32-битных архитектурах, или 24 байта в новеньких 64-битных архитектурах.
Так ref
что примерно ref.capacity() * 12 байт непрерывной памяти.
Каждый элемент/ в ref управляет своими собственными целыми числами, независимыми от управляемых vector<int>
элементов. ref
В художественном рендеринге ниже ref.size() == ref.capacity()
для простоты.
Так что ваши
ref.resize(i);
влияет только на верхний ряд. Ваш
ref[i].push_back(23);
влияет только на i-й столбец.
Комментариев нет:
Отправить комментарий