0
我想在我的程序std::array
更换std::vector
,所以我去测试:的std ::阵VS C-阵列VS STD:向量
template<typename T> class A{
public:
void sub_run(T w){
w[0] = 0.5;
w[1] = 1.5;
w[2] = 2.5;
w[3] = 0.0;
for (int i = 0; i < 100000000; i++)
{
w[0] = i *0.5;
w[1] = i *1.5;
w[2] = i *2.5;
w[3] = w[0] + w[1]*w[2];
}
}
};
int main(){
// Vectors
/*
A<vector<double> > inst_a;
vector<double> w(4);
inst_a.sub_run(w);
*/
// 1.71 sec
// C-array
/*
A<double *> inst_a;
double w[4];
inst_a.sub_run(w);
*/
// 1.03 sec
// std::array
A<array<double,4> > inst_a;
array<double,4> w;
inst_a.sub_run(w);
// 3.31 sec
return 0;
}
好,产量奇不够的 - 在std::array
是比C阵列慢3倍,甚至比vector
慢。没有应用优化,唯一的标志是-std=c++11
。 什么可能是错的?
*未应用优化,唯一的标志是-std = C++ 11。什么可能是错的?*。你有没有检查何时应用优化?未优化的C++没有试图以任何形式或形式击败“类C”的性能,因此如果您要讨论最终产品的性能,您必须允许C++编译器进行优化......因为否则,它会留下很多帮助调试/等的东西。不公平的比较。 – HostileFork 2014-10-20 11:49:59
“没有应用优化”正是错误的。 – 2014-10-20 11:50:28
“”没有应用优化“正是错误。” - 这在某种程度上是不明显的,因为cppreference.com只是说“......将C风格数组的性能和可访问性与标准容器的优点相结合,比如了解它自己的大小,支持分配,随机访问迭代器等“。 – stkubr 2014-10-20 11:59:28