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

На reserve не распространяется коэффициент роста, что ли? Если распространяется, то

я все равно не понимаю, что происходит, да и в любом случае какое-то ненормальное замедление.

21 ответов

9 просмотров

ну логика как будто хочет сказать что да, не распространяется Но ответа я не знаю

Maks
ну логика как будто хочет сказать что да, не распр...

https://en.cppreference.com/w/cpp/container/vector/reserve Раздел notes: Correctly using reserve() can prevent unnecessary reallocations, but inappropriate uses of reserve() (for instance, calling it before every push_back() call) may actually increase the number of reallocations (by causing the capacity to grow linearly rather than exponentially) and result in increased computational complexity and decreased performance. For example, a function that receives an arbitrary vector by reference and appends elements to it should usually not call reserve() on the vector, since it does not know of the vector's usage characteristics.

Думаю, можно утверждать, что точно не распространяется. Сколько просите в резёрве, столько и будет капасити (при увеличении).

Alex- Автор вопроса
Vanya Khodor
Думаю, можно утверждать, что точно не распространя...

Тогда использование reserve может быть антипаттерном, интересно

Vanya Khodor
Думаю, можно утверждать, что точно не распространя...

Я уже некоторое время назад задумывался над тем, что нужна перегрузка reserve, использующая экспоненциальную стратегию расширения. Может быть даже стоит предложить Антону.

magras
Я уже некоторое время назад задумывался над тем, ч...

А какое поведение? Если текущее капасити C, а reserve на C+x, то делать резёрв на kC, где k такое, чтобы (k-1)C<C+x≤kC?

Alex- Автор вопроса
magras
Я бы предложил max(requested, current*k).

Где k это стандартное 2?

А какой юз-кейс будет у данной перегрузки? Я пока его не вижу. reserve как раз таки используется тогда, когда известно сколько должно быть элементов в векторе, и в этом случае экспоненциальный рост не нужен точно. А если уж кто-то зачем-то хочет сделать reserve с экспоненциальным ростом, то ему скорее всего нужен не reserve, а push_back или range insert.

Daniel
А какой юз-кейс будет у данной перегрузки? Я пока ...

Exception safety: for unknown numer of iterations { v.reserve(v.size()+1); auto x = throwing_function(); // nothrow part v.push_back(x); }

magras
Exception safety: for unknown numer of iterations...

а зачем нам небросающий v.push_back(x), если у нас v.reserve бросит вместо него исключение?

Daniel
а зачем нам небросающий v.push_back(x), если у нас...

Чтобы вынести бросающий код из цикла например

Daniel
а зачем нам небросающий v.push_back(x), если у нас...

Как в общем случае пишется exception safe code? В начале выполняются все опасные операции, но результаты сохраняются только локально. И только когда все бросающие функции отработали успешно, фиксируем результат в выходных данных. Грубо говоря идея в том, что откат транзакции должен быть пустой операцией: тогда не нужно писать catch и явно обрабатывать исключения.

Basic guarantee: v.reserve(v.size()+1); auto x = throwing_function(); v.push_back(x); Strong guarantee: v.push_back(throwing_function()); А если у нас 'unknown number of iterations', то здесь ведь только basic получится (если v — инъектированная зависимость). А если мы с откатами хотим поменять v, то тогда уж copy-and-swap. Разделять push_back на reserve (с unlikely бранчем) + push_back имеет смысл только, если мы хотим сэкономить 1 вызов throwing_function после бросания исключения аллокатором.

Daniel
Basic guarantee: v.reserve(v.size()+1); auto x =...

> Strong guarantee: > v.push_back(throwing_function()); Здесь вы предполагаете что throwing_function можно откатить и что x реализует raii, а там может быть например отправка данных по сети.

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
а чем хуже?
Alexey Kulakov
10
Карта сайта