При резервировании принудительно увеличить пропускную способность вектора на коэффициент, определенный реализацией
Итак, у меня есть класс, обертывающий вектор с инвариантом, который
vec.capacity() > vec.size()
так что я всегда могу (временно) emplace_back еще один элемент без перераспределения. Моей первой идеей было позвонить
vec.reserve(vec.size() + 1)
для каждой вставки, но это неэффективно, как видно в этом потоке stackru, и вставка вызывается очень часто. (То же самое и pop_back, поэтому максимальное количество элементов намного меньше, чем количество вызовов вставки.)
Моя текущая упрощенная реализация выглядит примерно так:
#include <vector>
template<typename T>
class VecWrapper {
private:
std::vector<T> vec;
public:
[[nodiscard]] auto insert(T new_element)
{
vec.emplace_back(std::move(new_element));
if (vec.capacity() == vec.size()) {
vec.emplace_back(vec.back());
vec.pop_back();
}
}
};
Есть ли менее неудобный способ инициировать расширение емкости вектора в соответствии со стратегией, определенной реализацией? Обратите внимание, что T не обязательно конструктивно по умолчанию.