问题描述
因此,我有一个包装向量的类,该向量具有不变的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 (将#修改为@)