在c++程式設計中,經常會配到資料的拷貝,如陣列之間元素的拷貝,一般的人可能都會用for迴圈逐個元素進行拷貝,在資料量不大的情況下還可以,如果資料量比較大,那麼效率會比較地下。而stl中就提供了乙個專門用來進行容器元素拷貝的函式copy。
copy的函式原型如下:
templateoutitcopy(init first, init last, outit x);
下面寫乙個簡單的測試程式分析copy的效率。
vectorivec;
for (int i = 0; i < 1000; i ++)
int* pint = new int[ivec.size()];
dword t1 = gettickcount();
std::copy(ivec.begin(),ivec.end(),pint);
dword t2 = gettickcount();
dword tcopy = t2 - t1;
dword t3 = gettickcount();
for (int i = 0; i < 1000; i ++)
dword t4 = gettickcount();
dword tcopy2 = t4 - t3;
printf("copy拷貝的時間為:%d\n",tcopy);
printf("for迴圈拷貝的時間為:%d\n",tcopy2);
執行截圖如下:
可以看出來,資料量比較小的情況下,時間沒有差別,那現在我將陣列元素的個數改為1000000看看如何。
vectorivec;
for (int i = 0; i < 1000000; i ++)
int* pint = new int[ivec.size()];
dword t1 = gettickcount();
std::copy(ivec.begin(),ivec.end(),pint);
dword t2 = gettickcount();
dword tcopy = t2 - t1;
dword t3 = gettickcount();
for (int i = 0; i < 1000000; i ++)
dword t4 = gettickcount();
dword tcopy2 = t4 - t3;
printf("copy拷貝的時間為:%d\n",tcopy);
printf("for迴圈拷貝的時間為:%d\n",tcopy2);
截圖如下:
從圖中可以看出,現在差距開始擴大,copy的時間幾乎是for迴圈的20分之一。對資料量稍微大一點,優勢逐漸顯示出來。
當增加到500萬個元素,看看效果如何:
可以看到差距更大了,居然copy的效率是for迴圈的30倍。
時間效率分析
也許對於學過資料結構的同胞來說,這是乙個再簡單不過的問題,但對於剛起步的菜鳥來說,這是個很寶貴的資源,在各大oj過題,時有超時現象出現,苦逼的我只能換思路,換 但自從有了時間效率分析,媽媽再也不用擔心我會超時了,那麼接下來,我便用最菜鳥的語言譜寫較完善的時間效率分析。演算法的時間效率分析主要在於計算...
MySQL Order By Rand 效率分析
最近由於需要大概研究了一下mysql的隨機抽取實現方法。舉個例子,要從tablename表中隨機提取一條記錄,大家一般的寫法就是 select from tablename order by rand limit 1。但是,後來我查了一下mysql的官方手冊,裡面針對rand 的提示大概意思就是,在...
php include效率分析
2013年1月16日 11 54 05 time microtime true include once b.php obj new b for i 0 i 100000 i echo microtime true time,time1 microtime true for i 0 i 100000...