GOOGLE ADS

среда, 4 мая 2022 г.

Как вектор вектора выравнивается в памяти?

Я понимаю, что набор размера вектора векторов во время выполнения
описывает, можно объявить вектор вектора как

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-й столбец.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...