C STL copy函式效率分析

2021-09-09 03:06:12 字數 1682 閱讀 6439

在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...