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

Я же правильно понимаю что вектор при вызове resize() в

меньшую сторону не делает реаллокацию ?

23 ответов

3 просмотра

Не гарантированно, но вроде обычно нет

Может и делать...

Главное - зачем тебе это знать?

там есть еще shrink_to_fit(), это как раз чтобы уменьшить потребляемую память, если resize в меньшу сторону был

Ilya Zviagin
Главное - зачем тебе это знать?

Ну как, к примеру либо использовать одну переменную типа вектор и ее ресайзить либо каждый раз новую.

нет, если resize в меньшую сторону, то он имеет право сделать реалокацию, только вот никто из существующих компиляторов такой фигней не занимаются

Александр Водянников
Ну как, к примеру либо использовать одну переменну...

ну если ты хочешь переиспользовать вектор каким то образом, типо положил 20 штук, забыл их, дальше опять начал накладывать новые, то как минимум там нужно вызывать деструкторы и сложность окажется линейной(95%, что там в случае тривиального случая они всё же просто забудутся)

Till Schneider
нет, если resize в меньшую сторону, то он имеет пр...

не наблюдаю в нормативном тексте resize() право инвалидировать все итераторы. такое явно пишут, по-моему

Vlad
не наблюдаю в нормативном тексте resize() право ин...

Там пишут о инвалидации текущей или следующих позиций Инвалидация != реалокация

Till Schneider
Там пишут о инвалидации текущей или следующих пози...

Именно, об инвалидации следующих позиций. Этого достаточно, чтобы трактовать как гарантию отсутствия инвалидации предыдущих. Возможно ли гарантировать отсутствие инвалидации при реалокации?

Till Schneider
Там пишут о инвалидации текущей или следующих пози...

если, как вы говорите, resize() может сделать реаллокацию, то инвалидировано будет все, а не только с текущей позиции и до конца shrink_to_fit() и тот инвалидирует все

Vlad
если, как вы говорите, resize() может сделать реал...

а если рассмотреть какую-то систему "сферический конь в вакууме", на которой возможно совершать реалокацию в меньшую сторону, просто высвобождая память неиспользуемых элементов, при этом не затрагивать ту память, которая была выделена под имеющиеся элементы?

Till Schneider
а если рассмотреть какую-то систему "сферический к...

но ведь задача стандарта как раз найти общее поведение, которое не будет противоречить большинству систем. Таким образом, даже если на описанной вами системе такое возможно, то мы все равно будем считать, что они инвалидировались, так как нам важна переносимость

Till Schneider
а если рассмотреть какую-то систему "сферический к...

Так это на любой системе можно, вот хоть прямо на Винде. Тем более что весьма вероятно что новый кусок памяти будет другим, и старый можно будет использовать полностью

Till Schneider
а если рассмотреть какую-то систему "сферический к...

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

Vlad
да, такое теоретически возможно, но я не вижу, что...

>> она не будет реаллокацией в терминах стандарта Я не уверен, но означает ли инвалидация, что адреса элементов будут буквально изменены? Если нет – инвалидация у нас всё-равно случалась, хотя адреса и не изменились – для нас это ничего не значит, мы всё равно не имеем права обращаться к данным по инвалидированным указателям из-за UB. А если обратимся и обнаружим, что элемент на месте – ничего страшного, ожидаемое поведение – тоже одно из проявлений UB

Ofee Oficsu
>> она не будет реаллокацией в терминах стандарта ...

я думаю, что она значит, что они могут измениться, потому что никто не требует от реализаций расширять текущий storage если адреса не поменялись и мы пользуемся старыми указателями и ссылками, то это даже не UB благодаря transparently replaceable, если я ничего не упускаю

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
12
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
I just installed it but how do I use it?
Talula
12
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Карта сайта