При резервировании принудительно увеличить пропускную способность вектора на коэффициент, определенный реализацией

Итак, у меня есть класс, обертывающий вектор с инвариантом, который 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 не обязательно конструктивно по умолчанию.

0 ответов

Другие вопросы по тегам