c++ - 保留时通过实现定义的因素强制增加向量容量
问题描述
所以我有一个类包装了一个向量,该向量具有不变量,vec.capacity() > vec.size()
因此我可以始终(临时)emplace_back 再分配一个元素而无需重新分配。我的第一个想法是调用vec.reserve(vec.size() + 1)
每个插入,但正如在这个 stackoverflow 线程中看到的那样,这是低效的,并且插入经常被调用。(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不一定是默认可构造的。
解决方案
推荐阅读
- java - 按顺序识别列表打印中的重复项
- java - 有什么方法可以在没有实体的情况下使用“@Procedure”注释?
- python - 对不同变量执行相同功能的有效方法
- reactjs - 尝试呈现 pdf 时出现 React-pdf 错误
- javascript - 在 React HOC 中渲染数组中的对象
- python - 神经网络中不断减少的损失
- ios - UIAlertController:如何使右键加粗?
- elasticsearch - 在 Liferay 中搜索
- android - 从 Android Studio 内部搜索 Android API 文档
- haproxy - HAProxy 上子域和通配符域的特定路由