данные). Их очень много(скажем, миллиарды байт). Вам надо что-то заинсертить в начало. Аллоцировать и перезаписывать старую память очевидно очень долго и не круто(если, например, аллоцируете лишь 1 байт по сравнению с такими размерами массива). Есть ли у вектора какая-то встроенная оптимизация для такого?
Я подумал, что тут может все работать как порядковое размещение на диске в виде инод. Нам достаточно лишь указать что вот здесь начало данных, смещение вот такое у куска памяти, дальше идет вот этот кусок памяти(с приложенным указателем на начало и размер). Затем вот такой кусок и так далее что-то вроде списка кусков памяти
Это вопрос про оптимизацию вставки в начало и конец. Про вставку не в начало и конец интересно тоже как оптимизировали
Такой «оптимизации» нет. STL-ный Вектор обязан хранить данные в непрерывном куске памяти. Что-то похожее на то, что вы описали, есть в std::deque
Если у вас огромный размер и надо вставку в начало, то вы неверно выбрали контейнер.
Именно, нужна дека.
Скажем, если нужен относительно непрерывный(не не везде, а лишь в местах) контейнер Как такая структура называется?
Допустим, std::deque
https://t.me/supapro/1290424
Там тоже местами непрерывная память, да?
Да. Почитайте про реализацию.
вы изобрели так называемый devector. это как вектор, но у него пустое место есть не только в конце аллокации, но и в начале, чтобы амортизировать не только аппенды, но и препенды. есть в boost
> есть в boost https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRCbgkgXsyCJQEVmFVPbpi5eAcrdEAP4-yWGqqvOny-eQ&s
Для такого можно по разному извращаться, зависит от того сколько вставок и куда. Может вектор векторов заюзать, чтобы менять только подвектора, например. Но задачи его мы не знаем, а про вставку в начало ты ему ответил.
Обсуждают сегодня