STL演算法分析之Copy()演算法

2021-08-14 21:14:29 字數 2147 閱讀 7686

在看sgi stl原始碼的時候,畢竟會碰到很多的演算法,不理解這些演算法對我們的閱讀產生了很大的影響,現在先來分析下幾個已經碰到的了的演算法。第乙個copy()演算法。

copy演算法說起來很簡單就是將迭代器裡面的 [first,last]區間裡的元素賦值到指定的 result 指定的區間裡面去[result,result+(last-first)]。看下函式原型 並且解析下。

[cpp]view plain

copy

template

<

class

inputiterator, 

class

outputiterator>  

outputiterator copy(  

inputiterator _first,   

inputiterator _last,   

outputiterator _destbeg  

);  

_first, _last

指出被複製的元素的區間範圍[ _first,_last).

_destbeg 

指出複製到的目標區間起始位置

返回乙個迭代器,指出已被複製元素區間的最後乙個位置。。

接下來我將放上乙個copy()的使用案例,並且對**裡面的細節,以及copy()演算法在容器內部的運動情況做乙個詳解。

#include #include #include int main()

; std::vectormyvector;

std::vector::iterator it;

myvector.resize(10); /*必須為vector分配空間,如果不分配空間會**的*/

//copy用法一:

//將陣列myints中的十個元素複製到myvector容器中

copy(myints, myints + 10, myvector.begin());

std::cout << "myvector contains: ";

for (it = myvector.begin(); it != myvector.end(); ++it)

std::cout << std::endl;

return 0;

}

首先這個沒啥說的,就是把這個陣列copy到了vector裡面去。 copy**到你的vs2013裡面跑一下就知道了。接下來我們說下copy元素並且插入到指定位置的時候,vector中指標的運作。先通過觀察資料變化來總結規律

#include #include #include int main()

; std::vectormyvector;

std::vector::iterator it;

myvector.resize(10); /*必須為vector分配空間,如果不分配空間會**的*/

//copy用法二:

//將陣列myints中的元素向左移動一位

我們將移動的值改為2.

在來測試乙個值,讓myints+5。

明眼的朋友一定都找出規律了,但是還是得來畫圖說明下copy在vector中的指標的運作模式。直接以第三個myints+5的運作為例說明,其他的都是相同原理,舉一反三。

多早幾次實驗,總結資料就會得出這個規律。這就是stl 當中的copy()演算法。

STL原始碼分析之copy演算法

copy 深入強化效率 首先,先看看assignment operator 即 operator 和拷貝建構函式的區別 第一,他們是不可能被同時呼叫的 其次,不管什麼建構函式,它只可能在需要構造乙個物件的時候被呼叫,比如 string s s1 string s s1 這裡呼叫的是拷貝建構函式,是構...

STL之演算法

演算法是指解決問題的方 而完整的描述,對於規範的輸入,在有限時間內要獲得所需要的輸出。不同的演算法可能使用不同的時間 空間或效率完成同樣的任務。想要評估乙個演算法的好壞,目前可以通過時間複雜度和空間複雜度來進行衡量。時間複雜度,是指演算法執行指令所需的計算量。演算法的執行時間和其所要處理的資料之間存...

STL原始碼分析之power演算法

關於演算法power 一般我們遇到要實現power演算法,最直接就是如下實現 cpp view plain copy print?int power int x,unsigned int n 然而,這樣計算的複雜度為o n 想要改進,因為 x n x n 2 x n 2 所以我們想,只要計算出了x ...