Vector遍歷性能對比

2022-07-19 23:24:26 字數 1765 閱讀 4029

偶然發現,遍歷vector時,使用兩種看上去沒什麼差別的方法,效能上卻有很大的差異。

#include #include 

class

cpoint;

int vectorread_0(const cpoint*arr, size_t size)

return

result;

}int vectorread_1(const vector&arr)

return

result;

}int vectorread_2(const vector&arr)

return

result;

}int vectorread_3(const vector&arr)

return

result;

}void

testvectorread()

start =::gettickcount();

result = 0

;

for (i = 0; i < nloopcount; i++)

end =::gettickcount();

cout

<< "

vectorread_0 takes:

"<< end - start << "

result:

"<< result

result = 0

;

for (i = 0; i < nloopcount; i++)

end =::gettickcount();

cout

<< "

vectorread_1 takes:

"<< end - start << "

result:

"<< result

result = 0

;

for (i = 0; i < nloopcount; i++)

end =::gettickcount();

cout

<< "

vectorread_2 takes:

"<< end - start << "

result:

"<< result

result = 0

;

for (i = 0; i < nloopcount; i++)

end =::gettickcount();

cout

<< "

vectorread_3 takes:

"<< end - start << "

result:

"<< result <}

執行結果(執行環境:thinkpad t430,vs2013):

vectorread_0 takes: 5663 result: -769903776

vectorread_1 takes: 0 result: -769903776

vectorread_2 takes: 0 result: -769903776

vectorread_3 takes: 0 result: -769903776

可見,vectorread_0效能非常糟糕,很可能編譯器對vector有特殊的優化。

另外,用同樣的方式測試了vector在寫入情況下的效能,幾種方法在效能上並沒有明顯差異。

map表遍歷性能

最近收到很多對資料庫查詢壓力過大的反饋,由於我的程式只是從資料庫讀取記錄,和進行緩衝 所以考慮通過延長應用程式內部的快取時間 增大快取量,使程式從快取中讀取資料,從而解決訪問資料庫過於頻繁的問題,從而降低資料庫讀取壓力。程式中的快取資料使用stl中的map表儲存,快取的資料量比較大,單個物件占用50...

js迴圈遍歷性能

定length for迴圈 有length 不定length for迴圈 使用陣列length 不定length for迴圈 判斷陣列length是否存在 foreach array自帶,對某些不適用例如 nodelist forof es6 mapforin 結論 普通for迴圈才是最優雅的 ps...

python效能對比

1 coding utf8 import datetime road nodes for i in range 5000000 road nodes i beg time datetime.datetime.now for key,val in road nodes.items pass end t...