将deque添加到向量末尾的最快方法

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

本文关键字:方法 deque 添加 向量      更新时间:2023-10-16

这个问题是关于速度的。

我正在使用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();

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