C++ STL學習——vector

發表於2016-09-12

學過C++的人肯定會很熟悉STL標準模板庫,STL其實就是封裝了一系列的介面,供我們呼叫。很多函式或者演算法的實現不需要我們從頭開始寫,大大提高我們的程式設計效率。這篇部落格在簡單介紹STL的情況下,會詳細的來介紹vector的使用。

STL共有六大元件:

一。容器(Container):是一種資料結構,如list,vector,deque,queue等,以模板類的方法提供,為了訪問容器中的資料,可以使用由容器類提供的迭代器。

二。迭代器(Iterator):提供了訪問容器中物件的方法。

三。演算法(Algorithm):用來操作容器中的資料的模板函式。

四。仿函式(Function object)。

五。迭代介面卡(Adapter)。

六。控制元件介面卡(allocator)。

我們這裡主要會討論的是容器、迭代器和演算法。這篇部落格我們先來談談vector。相關的示例程式碼上傳至https://github.com/chenyufeng1991/STL_vector  。vector對應的資料結構為陣列,而且是動態陣列,也就是說我們不必關心該陣列事先定義的容量是多少,它的大小會動態增長。與陣列類似的是,我們可以在末尾進行元素的新增和刪除,也可以進行元素值的隨機訪問和修改。首先要引入標頭檔案 #include <vector>。具體使用如下:

(1)vector的建立

建構函式進行了過載,可以用多種方式建立vector。

(2)push_back(),pop_back()新增刪除元素

可以使用push_back()不斷的在vector尾部新增元素,使用pop_back刪除尾部元素。操作非常的方便,比我們直接用陣列結構方便多了。

(3)[],at(),取某位置的元素值

因為vector的資料結構就是一個陣列,所以可以進行隨機訪問。

(4)begin(),end(),指向頭元素、尾元素的指標

這裡以列印vector中的所有元素來理解begin().end()。這裡需要使用迭代器來進行遍歷,也可以把迭代器理解為指標,把begin(),end()分別理解為頭指標和尾指標。這樣就能訪問到vector中的每一個元素了。

(5)back(),front(),訪問頭部元素和尾部元素

(6)max_size(),vector的最大容納量;size():vector當前的元素個數。

(7)empty(),判斷vector是否為空

如果為空,返回1.否則返回0。

(8)swap():交換兩個vector中的值。

(9)sort():對vector升序排序;reverse():對vector降序排序。

傳遞的引數是需要排序的範圍,因為這裡要對整個vector排序,所以引數分別指向頭部和尾部。

(10)[],at():修改元素

(11)erase():刪除某個元素

在刪除元素時,要借用迭代器。

(12)insert(): 插入元素

同樣要藉助迭代器。

(13)clear():清除所有元素

執行以後就是一個空的vector,不包含任何元素。

關於vector的更詳細介紹可以參考文件:http://en.cppreference.com/w/cpp/container/vector