我想知道如果它是更快地具有std::vector<std::vector<double>>
其中嵌套矢量总是有2个元素,或者是它更快地具有std::vector<MyPoint>
其中MyPoint就像定义:哪个更快?
struct MyPoint {
double Point[2];
};
由于
我想知道如果它是更快地具有std::vector<std::vector<double>>
其中嵌套矢量总是有2个元素,或者是它更快地具有std::vector<MyPoint>
其中MyPoint就像定义:哪个更快?
struct MyPoint {
double Point[2];
};
由于
的vector<MyPoint>
是优选的,因为MyPoint
可能:
vector<double>
(你可以用sizeof
检查),和/或例如,在我的32位gcc上,std::vector<double>
的大小为12,而MyPoint
的大小为16,但该向量使得额外分配。在64位实现中,MyPoint
几乎肯定会是相同的大小,但std::vector
可能会更大。
另外,矢量表示使用连续内存的可变大小的有序容器。所以对于size-2数组来说可以说是矫枉过正,因为矢量的使用引入了大小可能改变的可能性。
我假定在第二个例子中,你的意思是:std::vector<MyPoint>
?是的,这个变种会更有效率。例如,您可以更轻松地保留大量内存,并且您将不得不少占总分配。
代替MyPoint,您也可以使用std::pair<double, double>
。
+1提及'std :: pair
在第二个例子中,你的意思是std::vector<MyPoint>
?这将比在矢量中具有矢量好得多。
不仅两个元素的向量速度较慢,而且动态结构总是保持2个元素(假设它不会改变),这看起来也很奇怪。为方便起见,我会使用struct MyPoint { double x, y; };
。
只要你没有测量,写出更容易阅读的代码(和使用'struct'的IMO)。只有牺牲了可读性,当你进行测量时,'vector'' vector's变得相当快。 – sbi 2010-07-12 08:02:53