LINUX.ORG.RU

Структура данных для набора одинаковых std::vector

 ,


0

1

Есть контейнер типа std::vector<std::vector<T>>. Обычно в нем хранится 3-5 векторов гарантированно одинакого размера (по 2-6 элементов). Хочу, чтоб контейнер находился в одном куске памяти, как какое проще всего сделать? (может уже есть такая структура?)

★★★★★

Последнее исправление: tailgunner (всего исправлений: 1)

Внезапно vector<T> с row-major порядком размещения элементов в памяти. cv::Mat как пример.

yoghurt ★★★★★
()

Если структура неизменна после создания, понятно что можно взять плоский вектор элементов + вектор range'ей на нём. Если изменяется, решений много в зависимости от того как и насколько они меняются и насколько меняются размеры.

Вектор массивов, несколько векторов массивов (по размеру массива). Вектор пар массив + к-во выделенных элементов (такая пара работает как inplace vector ограниченного размера), slab allocator всевозможных поведений, наличие или неналичие freelist и т.д.

slovazap ★★★★★
()

Обычно в нем хранится 3-5 векторов гарантированно одинакого размера (по 2-6 элементов).

Матрица/многомерный массив, но с классами внутри? Boost.MultiArray, cppmat, ...

В STL на них забили.

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

Если boost, то можно

using bsv = boost::container::static_vector;
using Matrix = bsv<bsv<T, 8>, 7>;
Даже семантика остается. Drop-in replacement.

KennyMinigun ★★★★★
() автор топика
Последнее исправление: KennyMinigun (всего исправлений: 1)

Внезапно, vector<T> :) К элементам обращаться так A[i*N+j], где N это максимальная длина строки.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.