【发布时间】:2013-02-16 11:51:31
【问题描述】:
我在用 C++ 编写的计算密集型搜索算法中使用queue<vector<int> >。我想用包含固定大小数组的队列或类似的 FIFO 结构替换此数据结构。 如何在 C++ 中做到这一点?
这种替换的动机是减少运行时间。在进行分析时,我注意到在创建向量和向向量中添加东西上花费了相当多的时间。我用固定大小的数组替换了一些关键向量,并测量了 20-50% 的运行时间减少。因此,我想替换上面 FIFO 数据结构中的向量。请注意,所有有问题的代码都是最内层循环的一部分,因此运行时会显着减少。
【问题讨论】:
-
我看不出制作一个固定大小数组的队列有什么帮助,向量可以廉价地交换和移动,数组不能。
-
您可能没有想到这一点,但是您是否考虑过将默认容器用于队列适配器,即 std::deque ?
-
只是好奇,但您是否在调试中配置文件?
vector在调试中慢。 @juanchopanza 真的,OP 应该考虑std::unique_ptr< std::array< int, 10 > >,如果事实证明这个std::vector实际上是一个问题,它可以让你快速移动,并具有固定大小缓冲区的大部分优点。 -
@Yakk 我相信我在发布模式下进行分析,因为我更新了 Xcode 方案中的相应条目。