这个问题与速度有关。
我在openCV库中使用一个函数(在FaceRecognizer类中),它需要输入一个向量。我需要通过组合几个deque来构建这个向量。除了遍历双端队列并将每个元素推回到向量之外,还有更快的方法吗?
关于deque的一些信息:它是一个15个元素的双端队列,我不断推送它,如果它有16个元素我pop_front。订单很重要。
或者我可以将deque's更改为向量,如果这可能会加速所有内容,但据我所知,当我在向量大小达到16时删除向量的第一个元素时会很慢。
答案 0 :(得分:3)
在矢量末尾添加双端队列的最快方法是什么?
可以在恒定时间内获取双端队列的大小(对于所有STL容器),然后在向量中保留空间以将内存管理开销限制为单个分配,最后将元素从双端队列中移出到向量中:
// 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
例外情况。在这种情况下,使用矢量的连续存储并不理想。
答案 1 :(得分:0)
您可以执行类似
的操作queue / vector myItem;
// Swap the position to the back, if it's first use 0 if you like
myItem[position].swap(myItem.back());
myItem.pop_back();
当你从前面移开时,它不会重新分配整个列表。