哪个更快?

时间:2010-07-11 23:26:17

标签: c++ vector

我想知道嵌套向量总是有2个元素的std::vector<std::vector<double>>是否更快,或者更快地得到std::vector<MyPoint>,其中MyPoint的定义如下:

struct MyPoint {
  double Point[2];
};

由于

4 个答案:

答案 0 :(得分:11)

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

  1. 小于vector<double>(您可以使用sizeof进行检查)和/或
  2. 减少分配。矢量对象本身很小,但通常指向堆上的数据。可以通过在向量对象中嵌入数据来优化小向量以避免额外分配,但不要指望它,因此
  3. 降低初始化,破坏和复制的开销。
  4. 例如,在我的32位gcc上,std::vector<double>的大小为12,而MyPoint的大小为16,但该向量会进行额外的分配。在64位实现上,MyPoint几乎肯定会有相同的大小,但std::vector可能会更大。

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

答案 1 :(得分:5)

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

您也可以使用std::pair<double, double>代替MyPoint。

答案 2 :(得分:1)

不仅两个元素的向量较慢,拥有动态结构以保持总是2个元素(假设它不会改变)也很奇怪。为方便起见,我会使用struct MyPoint { double x, y; };

答案 3 :(得分:0)

你的意思是第二个例子中的std::vector<MyPoint>吗?这比在矢量中使用矢量要好得多。