[英]C++ Std queue and vector performance
我最近一直在处理图表,我正在寻找从图表中返回路径。 该路径需要作为std向量返回,该向量包含首先具有起始节点的所有节点。
我一直在寻找两个选项: - 使用慢向量插入方法在向量的前面添加节点 - 使用deque将节点添加到前面(push_front),这要快得多。 然后使用std :: copy将双端队列复制到向量
使用一种方法比另一种方法有显着的性能提升吗?
因为你正在返回一条路径,所以你的长度可能会有一个上限。 因此,您可以调用create a vector
,call reserve
和稍后(如@ user2079303写入)调用push_back
将顶点添加到路径中。
const auto n = <graph_size>
std::vector<size_t> path;
path.reserve(n)
...
v.push_back(i); // Push whatever you want.
现在的问题是,至少从问题来看,似乎v
是颠倒的顺序。 但是,您只需调用std::reverse
:
std::reverse(std::begin(v), std::end(v));
所以,只使用一个vector
:
您正在分配单个数据结构而不是两个; 而且,使用reserve
会有一个内存分配。
最后使用reverse
只是替换了你需要从deque到vector的copy
的使用。
如果你正在寻找在std::queue
中包装std::vector
,那么std::queue
会将元素推送到向量的后面 (快速方式)。
即使不是这样,因为std::vector
是连续存储,即使你使用push_font()
,它也可能会超出std::deque
因为它可以很好地与CPU
缓存很好地混合数据。
但是为什么不试试这两个并分析代码以查看哪个代码表现更好?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.