c ++容器在向末尾添加元素时非常有效

Lea*_*ess 6 c++ containers vector

我一直在运行一个用于科学目的的c ++程序,现在我正在考虑优化它.

瓶颈似乎是我需要堆叠整数对的函数.从一开始就不可能知道它们的数量,而且我一直在使用std::vector一个自定义结构,其中包含两个ints.是否有更高效的数据容器可以在最后重复添加元素?我应该使用两个ints而不是一对或自定义结构吗?

编辑:在对我的程序进行计时和分析之后,我可以说,对于我的使用,vector它比deque(仅仅3%)快一点.我的外行结论是CPU充分利用了数据的连续性.优化对我来说比以往任何时候都更具魔力!对于那些它可能会有所帮助:我实际上通过从STL C++ 11随机数发生器切换到BOOST来显着改善了我的运行时间.

gd1*_*gd1 10

您必须做的对数重新分配的成本可以说无关紧要.但是,您可以考虑使用std::deque保证O(1)在前端和末端插入的一个.你会失去连续性,但保留了一些缓存友好性.A deque通常是一个不错的权衡,特别是如果你需要从前面弹出.

还要考虑估计矢量将存储和使用的元素数量reserve.但要小心,不要浪费太多记忆,否则你会得到相反的效果.

  • 一个很好的研究:http://www.codeproject.com/Articles/5425/An-In-Depth-Study-of-the-STL-Deque-Container (2认同)