Effective STL 第5條:區間成員函數優先於與之對應的單元素成員函數

使用區間成員函數而不是其相應的單元素成員函數的原因:

l  通過使用區間成員函數,通常可以少寫一些代碼。

l  使用區間成員函數通常會得到意圖清晰和更加直接的代碼。

l  在一般情況下,效率更高。

 

區間操作有以下幾種:

區間創建。所有的標準容器都提供瞭如下形式的構造函數:

container::container (InputIteratorbegin, InputIterator end).

當傳給這種構造函數的迭代器是istream_iteratoristreambuf_iterator時,你可能會遇到C++最煩人的分析(parse)機制,它使編譯器把這條語句解釋爲函數的聲明,而不是函數定義新的容器對象。

 

區間插入。所有的標準序列容器都提供瞭如下的insert

void container::insert (iteratorposition, InputIterator begin, InputIterator end);

//在何處插入區間,區間開始,區間結束。

關聯容器利用比較函數來決定元素該插入何處,它們提供了一個省去position參數的函數原型:

void container::insert(InputIteratorbegin, InputIterator end);

在尋找區間形式的insert來替代單元素版本時,不要忘了一些單元素的變體使用了不同的函數名稱,從而把自己給掩蓋了。比如,push_frontpush_back都向容器中插入單一元素,儘管他們不叫insert。當你看到使用push_frontpush_back的循環調用,或者front_inserterback_inserter被作爲參數傳遞給copy函數時,你會發現在這裏區間形式的insert可能是更好的選擇。

 

區間刪除。所有的標準容器都提供了區間形式的刪除(erase)操作,但對於序列和關聯容器,其返回值有所不同。

序列容器提供了這樣的形式:

iterator container::erase(iteratorbegin, iterator end);

而關聯容器則提供瞭如下形式:

void container::erase(iterator begin,iterator end);

 

區間賦值。所有的標準容器都提供了區間形式的assign

void container::assign(inputIteratorbegin, InputIterator end);

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章