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

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

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

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

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

11 ответов

38 просмотров

Такой «оптимизации» нет. 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. это как векто...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта