170 похожих чатов

Такой вопрос. Представьте, что у вас есть std::vector(то есть последовательные

данные). Их очень много(скажем, миллиарды байт). Вам надо что-то заинсертить в начало. Аллоцировать и перезаписывать старую память очевидно очень долго и не круто(если, например, аллоцируете лишь 1 байт по сравнению с такими размерами массива). Есть ли у вектора какая-то встроенная оптимизация для такого?

Я подумал, что тут может все работать как порядковое размещение на диске в виде инод. Нам достаточно лишь указать что вот здесь начало данных, смещение вот такое у куска памяти, дальше идет вот этот кусок памяти(с приложенным указателем на начало и размер). Затем вот такой кусок и так далее что-то вроде списка кусков памяти

Это вопрос про оптимизацию вставки в начало и конец. Про вставку не в начало и конец интересно тоже как оптимизировали

11 ответов

12 просмотров

Такой «оптимизации» нет. STL-ный Вектор обязан хранить данные в непрерывном куске памяти. Что-то похожее на то, что вы описали, есть в std::deque

Если у вас огромный размер и надо вставку в начало, то вы неверно выбрали контейнер.

Vladislav-Vasil'ev Автор вопроса
Alexander "Ternvein" Isaev
Если у вас огромный размер и надо вставку в начало...

Скажем, если нужен относительно непрерывный(не не везде, а лишь в местах) контейнер Как такая структура называется?

Vladislav-Vasil'ev Автор вопроса
Alexander Pshenichnikov
Допустим, std::deque

Там тоже местами непрерывная память, да?

вы изобрели так называемый devector. это как вектор, но у него пустое место есть не только в конце аллокации, но и в начале, чтобы амортизировать не только аппенды, но и препенды. есть в boost

Ivan Sokolov
вы изобрели так называемый devector. это как векто...

> есть в boost https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRCbgkgXsyCJQEVmFVPbpi5eAcrdEAP4-yWGqqvOny-eQ&s

Ivan Sokolov
вы изобрели так называемый devector. это как векто...

Для такого можно по разному извращаться, зависит от того сколько вставок и куда. Может вектор векторов заюзать, чтобы менять только подвектора, например. Но задачи его мы не знаем, а про вставку в начало ты ему ответил.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Кто-нибудь знает, как считается нагрузка на цпу? И что такое вообще "нагрузка на цпу"? вот, например, есть у цпу какой-то clock, настроенный на 3 ГГц --- Что значит "нагрузка...
Toideng
15
Можно ли написать свою библиотеку "socket" на каком либо языке ассемблера с нуля не используя сишние библиотеки ? Или это самоубийство ?
123🪐
15
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
{!! $modx->runSnippet( 'multiTV',[ 'tvName'=>'slider-main1', 'docid'=>'[*id*]', 'tplConfig'=>'', 'display'=>'4', 'offset'=>'0', 'rows'=>'all', 'ra...
Роман С
4
PopOs or Linux Mint for a noob starter? Also do you have any articles on how to safely dual boot Windows 10 alongside it? I've heard there are a bunch problems that can occur...
Senator
14
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Карта сайта