C++學習筆記(四)

1.抽象容器類型

(1)順序容器:擁有由單一類型元素組成的一個有序集合。兩個主要的順序容器是List 和 vector。

(2)關聯容器:支持查詢一個元素是否存在,並且可以有效的獲取元素。兩個基本的關聯容器是map(映射)和set(集合)。

map是一個鍵值對,map可以很好的支持電話目錄;

set包含一個單一鍵值,有效支持關於元素是否存在的查詢。

 

vector表示一段連續的內存區域,每個元素被順序尋存儲在這段內存中,在vector的隨機訪問效率很好,因爲每次訪問離vector起始處的位移都是固定的,但是,在任意位置,而不是在vector末尾插入元素,則效率很低,因爲他需要把帶插入元素右邊的每個元素都拷貝一邊。

list表示非連續的內存區域,並通過一對指向首尾元素的指針雙良鏈表起來,從而允許向前和向後兩個方向進行遍歷。在list的任意位置插入和刪除元素的效率都很好,從而允許被重新賦值,但是,不需要用拷貝元素來實現移動。另一方面,它對隨機訪問的支持並不好,訪問一個元素都需要遍歷中間的元素,另外,每個元素還有兩個指針的二外空間開銷。

 

選擇順序容器類型的一些準則:

a.如果我們需要隨機訪問一個容器,則vector要比list好的多。

b.如果我們已知要存儲元素的個數,則vector又是一個比list好的選擇。

c.如果我們需要的不只是在容器兩端插入和刪除元素,則list顯然要比vector好。

d.除非我們需要在容器首部插入和刪除元素,否則vector要比deque好。

 

2.迭代器(iterator)

迭代器提供了一種一般化的方法,對順序或關聯容器類型中的每個元素進行連續訪問。

例如:iter是任意容器類型的一個iterator,則++iter向前移動迭代器,使其指向容器的下一個元素,而×iter返回iterator指向元素的值。

每種容器類型都提供一個begin()和一個end()成員函數;

a.begin()返回一個iterator,他指向容器的的一個元素;

b.end()返回一個iterator,它指向容器的末元素的下一個位置。

爲了迭代任意容器類型的元素,我們可以這樣寫:

for(iter = container.begin(); iter !=container.end();iter++){

do_something(*iter);

}

 

3.泛型算法

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章