stl定義了5個全域性函式,作用在未初始化的空間上。
1. construct()
2. destroy()
3. uninitialized_copy()
4. uninitialized_fill()
5. uninitialized_fill_n()
見sgi記憶體管理
這個函式的作用是把[first, last)範圍的物件複製到result中。如果沒有初始化,則使用copy constructor,複製物件。
inline forwarditerator
uninitialized_copy(inputiterator first, inputiterator last,
forwarditerator result)
判斷是否為pod(plain old data),為標量型別或者傳統的c struct型別.
inline forwarditerator
__uninitialized_copy(inputiterator first, inputiterator last,
forwarditerator result, t*)
pod類型別就是指class、struct、union,且不具有使用者定義的建構函式、析構函式、拷貝運算元、賦值運算元;不具有繼承關係,因此沒有基類;不具有虛函式,所以就沒有虛表;非靜態資料成員沒有私有或保護屬性的、沒有引用型別的、沒有非pod類型別的(即巢狀類都必須是pod)、沒有指標到成員型別的(因為這個型別內含了this指標)。簡單的說直接的記憶體複製操作對pod型別沒有影響,比如用memset進行初始化,但這對於非pod型別是不可行的,比如存在虛函式的情況下。對於pod型別我們採用最有效率的複製手法,而對於no-pod型別的採取最安全的做法。uninitialized_copy()使記憶體的配置與物件的構造分離,針對不同的物件有不同的構造方法,最終呼叫的這兩個建構函式為
// valid if copy construction is equivalent to assignment, and if the
// destructor is trivial.
template
inline forwarditerator
__uninitialized_copy_aux(inputiterator first, inputiterator last,
forwarditerator result,
__true_type)
template
forwarditerator
__uninitialized_copy_aux(inputiterator first, inputiterator last,
forwarditerator result,
__false_type)
__stl_unwind(destroy(result, cur));
}//一下針對char*和wchar_t*使用更高效的memmove()
inline
char* uninitialized_copy(const
char* first, const
char* last,
char* result)
inline
wchar_t* uninitialized_copy(const
wchar_t* first, const
wchar_t* last,
wchar_t* result)
uninitialized_fill也將記憶體配置與物件的構造分離,對[first, last)範圍的迭代器i,呼叫construct(&*i, x);
const t& x)
萃取出value_type
template
inline
void __uninitialized_fill(forwarditerator first, forwarditerator last,
const t& x, t1*)
對不同的情況,有不同的處理方式
template
inline
void
__uninitialized_fill_aux(forwarditerator first, forwarditerator last,
const t& x, __true_type)
template
void
__uninitialized_fill_aux(forwarditerator first, forwarditerator last,
const t& x, __false_type)
__stl_unwind(destroy(first, cur));
}
uninitialized_fill_n在[first, first+n)上填充x
inline forwarditerator uninitialized_fill_n(forwarditerator first, size n,
const t& x)
然後萃取value_type
template
inline forwarditerator __uninitialized_fill_n(forwarditerator first, size n,
const t& x, t1*)
對具體問題,有不同的處理
template
inline forwarditerator
__uninitialized_fill_n_aux(forwarditerator first, size n,
const t& x, __true_type)
template
forwarditerator
__uninitialized_fill_n_aux(forwarditerator first, size n,
const t& x, __false_type)
__stl_unwind(destroy(first, cur));
}
STL 記憶體基本處理工具
stl定義有五個全域性函式,作用於未初始化空間上,這樣的功能對於容器的實現很有幫助。前兩個函式是用於構造的construct 和用於析構的destroy 另三個函式是uninitialized copy uninitialized fill uninitialized fill n,分別對應於高層次...
shell檔案處理工具
vim etc resolve.conf 檢視dns 6.shell指令碼命令 1.diff diff file file 比較兩個檔案的不同 c 顯示周圍的行 u 按照一格式統一輸出生成補丁 r 比較兩個目錄中檔案的不同 pattch file file.path 打補丁 b 備份原檔案 2.gr...
文字的處理工具
在linux中我們經常編輯修改檔案,即由ascii,unicode 或其它編碼的純文字的檔案。vi是visual editor,文字編輯器,是linux 必備工具之一,功能強大,學習曲線較陡峭,學習難度大。vimvisual editor improved 和vi 使用方法一致,但功能更為強大,不是...