将deque添加到向量末尾的最快方法
Fastest way to add a deque onto the end of a vector?
这个问题是关于速度的。
我正在使用openCV库中的一个函数(在FaceRecognizer类中(,该函数需要输入向量。我需要通过组合几个deque来构建这个向量。除了迭代deque并将每个元素推回到向量之外,还有其他更快的方法吗?
关于deque的一些信息:它是一个由15个元素组成的deque,我在其中连续push_back,如果它有16+个元素,我就pop_front。秩序很重要。
或者,如果可以加快一切速度,我可以将deque改为向量,但据我所知,当向量的第一个元素达到16时,删除它会很慢。
将deque添加到向量末尾的最快方法?
可以在恒定的时间内获得deque的大小(对于所有STL容器(,然后在向量中保留空间以将内存管理开销限制在单个分配中,最后将元素从deque移到向量中:
// std::vector v, std::deque d
v.reserve(v.size() + d.size());
std::move(std::begin(d), std::end(d), std::back_inserter(v));
d.clear(); // or reuse in some way
如果您打算将多个容器附加到向量,请考虑reserve
一次完成所需的完整存储。
如果数据量很大,请注意std::bad_alloc
异常。在这种情况下,使用向量的连续存储并不理想。
你可以做一些类似的事情
队列/矢量myItem;
// Swap the position to the back, if it's first use 0 if you like
myItem[position].swap(myItem.back());
myItem.pop_back();
然后,当你从前面删除时,它不会重新分配整个列表。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 为什么当我调用告诉它的方法时,我的 deque 不会pop_front?
- 创建了一个 deque 类,但无法在我的二叉树类方法中声明
- 将deque添加到向量末尾的最快方法
- 函数/方法指针被压入Deque