- (以?下?“質變”欄意指mutating,意思是?“會改變其操作對象之內容”)?
?
?
?
?
?其余注意事項
- 將無效的迭代器傳給某個算法,雖然是一種錯誤,卻不保證能夠在編譯時期就
被捕捉出來,因為所謂“迭代器類型”并不是真實的型別,它們只是function?template
的一種型別參數(type?parameters) - 許多STL?算法不只支持一個版本.這一類算法的某個版本采用缺省運算行為,
另一個版本提供額外參數,接受外界傳入一個仿函數(functor),?以便采用其他策略。例如?unique()?缺省情況下使用equality操作符來比較兩個相鄰元素,但如果這些元素的型別并未供應equality操作符,或如果用戶希望定義自己的equaHty?操作符,便可以傳一個仿函數(fimctor)給另一版本的?unique?()?有些算法干脆將這樣的兩個版本分為兩個不同名稱的實體,附從的那個總是以作為尾詞,例如?find_if?().?另一個例子是replace?(?)?,?使用內建的equality操作符進行比對操作,replace_if()則以接收到的仿函數(functor)進行比對行為 - 所有的數值(numeric)算法,包括 adjacent_dif ference () , accumulate (), inner_product () , partial_sum( ) 等等,都實現于 SGI <stl_numeric ,h> 之中,這是個內部文件,S T L 規定用戶必須包含的是上層的〈numeric〉。其他STL 算法都實現于SGI的 <stl_algo.h>和<stl_algobase.h>文件中,也都是內部文件;欲使用這些算法,必須先包含上層相關頭文件<algorithm>
- 關鍵在于,只要把操作對象的型別加以抽象化,把操作對象的標示法和區間目標的移動行為抽象化,整個算法也就在一個抽象層面上工作了。整個過程稱為算法的泛型化 (generalized), 簡稱泛化
?