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.但要小心,不要浪费太多记忆,否则你会得到相反的效果.