将双端队列添加到向量末尾的最快方法?

Fastest way to add a deque onto the end of a vector?

这个问题是关于速度的。

我正在使用 openCV 库(在 FaceRecognizer class 中)中的一个函数,它需要输入向量。我需要通过组合几个双端队列来构建这个向量。除了遍历双端队列并将每个元素推回向量之外,还有其他更快的方法吗?

关于双端队列的一些信息:它是一个包含 15 个元素的双端队列,其中我连续 push_back,如果它有 16 个以上元素,我 pop_front。订单很重要。

或者,我可以将双端队列更改为向量,如果这样可以加快一切,但据我所知,当我删除向量的第一个元素时,当它达到大小 16 时,速度会很慢。

你可以这样做

queue/vector 我的项目;

// Swap the position to the back, if it's first use 0 if you like
myItem[position].swap(myItem.back());
myItem.pop_back();

然后当你从前面删除时它不会重新分配整个列表。

Fastest way to add a deque onto the end of a vector?

可以在恒定时间内获取双端队列的大小(对于所有 STL 容器),然后在向量中保留 space 以将内存管理开销限制为单个分配,最后将元素移出双端队列进入向量:

// 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 异常。在那种情况下,使用向量的连续存储并不理想。