это uint32_t:
idx.push_back(idxLast+0); idx.push_back(idxLast+1); idx.push_back(idxLast+2);
idx.push_back(idxLast+1); idx.push_back(idxLast+2); idx.push_back(idxLast+3);
Добавил перед ним idx.reserve(idx.size() + 6); - код стал в 30 (!!!) раз медленнее, и висит в коллстеке на скриншоте выше.
???
idx.reserve(idx.size() + max(6, idx.size()/2))
В чем сакральный смысл reserve(size()/2)?🤔
Только этот код ничего не делает (если, конечно, в посте не опечатка)
вопрос в том от ччего берется сайз?
Да, поэтому я и сказал про опечатку))
Ты плохо смотришь
Опечатка в ответе
Правда наверное стоит не так писать А типо auto needed_size = v.size() + other.size(); if (v.capacity() < needed_size) { v.reserve(max(needed_size, v.capacity() * 3/2)); } В коде выше есть проблема да...
Вот такой if как раз лишний... Хотя хороший вопрос, как сделать красивее
Не мы не лишний, так как иначе у нас после итерации size увеличиться и мы опять сделаем reserve
Кажется такой код решает эту задачу? Мы растем только когда нужно, и когда нужно растем либо так чтобы влезла вся следующая итерация, либо на 1.5, если следующая итерация маленькая
точнее, если убрать if - на каждом проходе capacity будет увеличиваться в 1.5 раза
Не, представь size = 10, capacity 10 needed_size = 11 После этой итерации size = 11, capacity = 15 needed_size = 12 После этой итерации size = 12, сapacity = 16
Придумать и реализовать свою стратегию роста можно, но зачем если меня устраивает дефолтная? Все что мне нужно - это возможность разделить push_back на бросающую часть (reserve_next) и не бросающую (push_back с предусловием что size < capacity). Я бы все-таки сказал что главным препятствием для этого предложения является то, что комитет, если мне не изменяет память, поддерживал идею использовать terminate вместо исключений, если закончилась память. Проверить мои слова можно откопав пропозал Саттера про исключения, кажется что там были результаты голосования по этому вопросу.
А как вы хендлите оом от резерва? Я в реальном коде никогда такого не видел, обычно это аборт. Потому что без памяти скорее всего уже не отрекавкриться.
Обсуждают сегодня