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