STL 記憶體基本處理工具

2021-09-06 20:16:30 字數 2088 閱讀 6007

stl定義有五個全域性函式,作用於未初始化空間上,這樣的功能對於容器的實現很有幫助。前兩個函式是用於構造的construct()和用於析構的destroy(),另三個函式是uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n,分別對應於高層次函式copy()、fill()、fill_n()——這些都是stl演算法。

1 uninitialized_copy

template

forwarditerator uninitialized_copy(inputiterator first,inputiterator last,forwarditerator result);

uninitialized_copy()使我們能夠將記憶體的配置和物件的構造行為分離開來,如果作為輸出目的地的[result,result+(last-first))範圍內的每乙個迭代器都指向為初始化區域,則uninitialized_copy()會使用copy constructor,給身為輸入**之[first,last)範圍內的每乙個物件產生乙份複製品,放進輸出範圍中。換句話說,針對輸入範圍內的每乙個迭代器i,該函式會呼叫construct(&*(result+(i-first)),*i),產生*i的複製品,放置於輸出範圍的相對位置上。

如果你需要實現乙個容器,uninitialized_copy()這樣的函式會為你帶來很大的幫助,因為容器的全區間建構函式通常以兩個步驟完成:

c++標誌規格書要求uninitialized_copy()具有「commit or rollback」語意,意思是要麼「構造出所有必要的元素」,要麼(當有任何乙個copy constructor失敗時)「不構造任何東西。

2 uninitialized_fill

template

forwarditerator uninitialized_fill(forwarditerator first,forwarditerator last,const t& x);

uninitialized_fill()也能夠使我們將記憶體配置與物件的構造行為分離開來。如果[first,last)範圍內的每個迭代器都指向未初始化的記憶體,那麼uninitialized_fill()會在該範圍內產生x(上式第三個引數)的複製品。換句話說,uninitialized_fill()會針對操作範圍內的每個迭代器i,呼叫construct(&*i,x),在i所指之處產生x的複製品。

與uninitialized_copy()一樣,uninitialized_fill()必須具備「commit or rollback」語意,換句話說,它要麼產生出所有必要元素,要麼不產生任何元素,如果有任何乙個copy constructor丟出異常(exception),uninitialized_fill(),必須能夠將已產生的所有元素析構掉。

3 uninitialized_fill_n

template

forwarditerator uninitialized_fill_n(forwarditerator first,size n,const t& x);

uninitialized_fill_n()能使我們將記憶體配置與物件構造行為分離開來,它會為指定範圍內的所有元素設定相同的初值。

如果[first,first+n)範圍內的每乙個迭代器都指向未初始化的記憶體,那麼uninitialized_fill_n()會呼叫 copy constructor,在該範圍內產生x(上式第三個引數——的複製品。也就是說,面對[first,first+n)範圍內的每個迭代器i,uninitialized_fill_n()會呼叫construct(&*i,x),在對應位置產生x的複製品。

uninitialized_fill_n()也具有「commit or rollback」語意:要麼產生所有必要的元素,否則就不產生任何元素。如果任何乙個copy constructor丟出異常(exception),uninitialized_fill_n()必須析構已產生的所有元素。

以下分別介紹這三個函式的實現法,其中所呈現的iterators(迭代器)、value_type()、_type_traits、_true_type、_false_type、is_pod_type等實現技術,都在後面介紹。

STL記憶體處理工具

stl定義了5個全域性函式,作用在未初始化的空間上。1.construct 2.destroy 3.uninitialized copy 4.uninitialized fill 5.uninitialized fill n 見sgi記憶體管理 這個函式的作用是把 first,last 範圍的物件複...

文字處理工具

參考 man,info,magedu講義 宣告 以下英文純屬個人翻譯,英文b級,歡迎糾正,以下內容純屬個人理解,並沒有對錯,只是參考,盜版不糾,才能有限,希望不誤人子弟為好。these commands read and write entire files,possibly transformin...

文字處理工具

linux 上文字處理三劍客 grep 文字過濾工具 模式 pattern awk linux上的實現為gwak 文字報告生成器 格式化文字 正規表示式 regual expression regexp 由一類特殊字元及文字所編寫的模式,其中有些字元表示其字面意義,grep options colo...