繁体   English   中英

C ++ Std队列和矢量性能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM