哪个更快?

jma*_*erx 3 c++ vector

我想知道如果它是更快地具有std::vector<std::vector<double>>其中嵌套矢量总是有2个元素,或者是它更快地具有std::vector<MyPoint>其中MyPoint就像定义:

struct MyPoint {
  double Point[2];
};
Run Code Online (Sandbox Code Playgroud)

谢谢

Ste*_*sop 11

vector<MyPoint>是可取的,因为MyPoint很可能:

  1. 小于vector<double>(你可以查看sizeof),和/或
  2. 减少分配.矢量对象本身很小,但通常指向堆上的数据.可以通过在向量对象中嵌入数据来优化小向量以避免额外分配,但不要指望它,因此
  3. 降低初始化,破坏和复制的开销.

例如在我的32位gcc上,std::vector<double>大小为12,而MyPoint大小为16,但向量进行了额外的分配.在64位实现上,MyPoint几乎肯定会有相同的大小,但std::vector可能会更大.

此外,向量表示使用连续内存的可变大小的有序容器.因此,对于size-2数组来说,它可能有点过分,因为使用向量会引入大小可能会发生变化的可能性.


Bri*_*ndy 5

我假设在第二个例子中你的意思是:std::vector<MyPoint>?是的,这种变体会更有效率.例如,您可以更轻松地保留大量内存,并且您必须减少总体分配.

而不是MyPoint你也可以使用std::pair<double, double>.