C 中std copy的用法

2021-08-28 03:39:28 字數 1000 閱讀 7115

如果要把乙個序列(sequence)拷貝到乙個容器(container)中去,通常用std::copy演算法,**如下:

std::copy(start, end, std::back_inserter(container));

這裡,start和end是輸入序列(假設有n各元素)的迭代器(iterator),container是乙個容器,該容器的介面包含函式push_back。假設container開始是空的,那麼copy完畢後它就包含n個元素,並且順序與原來佇列中的元素順序一樣。標準庫提供的back_inserter模板函式很方便,因為它為container返回乙個back_insert_iterator迭代器,這樣,複製的元素都被追加到container的末尾了。 

現在假設container開始非空(例如:container必須在迴圈中反覆被使用好幾次)。那麼,要達到原來的目標,必須先呼叫clear函式然後才能插入新序列。這會導致舊的元素物件被析構,新新增進來的被構造。不僅如此,container自身使用的動態記憶體也會被釋放然後又建立,就像list,map,set的節點。某些vector的實現在呼叫clear的時候甚至會釋放所有記憶體。

通常,考慮到在乙個已有的元素上直接copy覆蓋更高效。keyi這樣做:

std::copy(start, end, container.begin());

在這裡你在container的頭部執行了copy-over(覆蓋賦值)操作,但是,如果container的大小小於輸入序列的長度n的話,這段**會導致崩潰(crash)。

eg1:

int a[3]=;

int b[3];

std::copy(a,a+3,b);

for(int j=0;j<3;j++)

cout<< p>

eg2:

vector temp(3);

int a[3]=;

std::copy(a,a+3,&temp.front());

cout<<

c 中 的用法

c 中的 至少有以下幾種作用 1.忽略轉義字元 例如 string filename d 文字檔案 text.txt 使用 後 string filename d 文字檔案 text.txt 2.讓字串跨行 例如 string strsql select from humanresources.em...

c 中 的用法

從這個帖子開始記錄一下我學習和工作當中遇到的問題,以及解決方法等等。最經公司需要對於乙個c 做的瀏覽器外掛程式做維護,使得以前沒接觸過c 的我遇到了一大堆問題,在這記錄下c 中 的用法 是運算子中等級最高的,它分為三種 1 global scope 全域性作用域符 用法 name 2 class s...

C 中 的用法

一 字串中的用法 1。地球人都知道 c 中 字串常量可以以 開頭聲名,這樣的優點是轉義序列 不 被處理,按 原樣 輸出,即我們不需要對轉義字元加上 反斜扛 就可以輕鬆coding。如,c code?1 stringfilepath c docs source a.txt rather than c ...