微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

保留时通过实现定义的因素来增强向量容量

如何解决保留时通过实现定义的因素来增强向量容量

因此,我有一个包装向量的类,该向量具有不变的vec.capacity() > vec.size(),因此我可以始终(暂时)再 emplace_back 个元素而无需重新分配。我的第一个想法是每次插入都会调用vec.reserve(vec.size() + 1),但是效率很低in this stackoverflow thread,并且insert经常被调用。 ( 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 不一定是认可构造的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。