保留时通过实现定义的因素强制增加矢量容量

Enforce increase of vector capacity by implementation defined factor when reserving

提问人:Emma X 提问时间:10/13/2020 最后编辑:Nicol BolasEmma X 更新时间:10/13/2020 访问量:59

问:

所以我有一个包装向量的类,该向量具有不变性,因此我总是(暂时)可以在不重新分配的情况下再emplace_back一个元素。我的第一个想法是调用每个插入,但这在这个 stackoverflow 线程中看到的效率很低,并且经常调用插入。(pop_back也是如此,因此最大元素数远低于插入调用数。vec.capacity() > vec.size()vec.reserve(vec.size() + 1)

我当前简化的实现如下所示:

#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 不一定是默认可构造的

C++ C++17 标准向量 实现定义的行为

评论


答: 暂无答案