vector是一種順序容器,有大小限制,但是可以動態的擴充套件,不能減小對應的空間,同陣列一樣,是線性排列的,在其尾不插入刪除效率很高,中間的插入刪除效率一般,可以向陣列一樣隨機訪問表中的元素。
stl中的資料結構,都可以使用自定義的資料型別,便於擴充套件。
標頭檔案:#include
using namespace std ;
1.建立物件與初始化:
(a) vectorv ;//建立乙個
t型別的
vector
,此時vector
為空,容量為
0.(b) vectorv (n);//建立乙個
t型別的
vector
,容量為
n(c) vectorv(v1) ;//建立乙個
t型別的
vector
,為v1
的乙個拷貝,要求資料型別相同。
(d) vectorv(n1 , n2) ;//建立乙個
t型別的
vector
,含n1
個元素,每個元素的值都為
n2 ;
(e) vectorv(v1.begin() , v2.end()) ;//建立乙個
t型別的
vector物件v
,元素為區間
[v1.begin() , v1.end())
的元素。
2.assign()//分配值
與list
相同有兩中使用方式
:v.assign(v1.begin() , v1.end()) ;//如果
v1中的元素為7個
4,此時v中有
7個4,後面的元素預設初始化為
0v.assign(7 , 4) ;//v中的元素為7個
4,如果原來
v的大小沒有
7,那麼會申請空間到7個。
3.back();//返回最後一元素,與
list
相同4.begin();//返回第乙個元素的迭代器,這些與
list
都相同5.capacity();
//返回
vector
所能容納的元素數量
(在不重新分配記憶體的情況下)
6.clear();//清空所有元素。
7.empty();//判斷
vector
是否為空(返回
true
時為空)
8.end();//返回最末元素的迭代器(譯註
:實指向最末元素的下乙個位置
)9.erase();//刪除節點內容用到了
erase()
函式,有兩個過載
:iterator erase( iterator loc );
iterator erase( iterator start, iterator end );
這兩個迭代操作尤其需要注意,涉及到迭代器的操作都需要考慮迭代器的時效性,操作完後,迭代器就失效了,需要重新複製,才能合法訪問。
10.front() ;//返回第乙個元素
11.get_allocator();//返回
vector
的記憶體分配器,感覺不怎麼常用
12.insert() ;//插入元素到
vector
中,運用類似與
list
的insert
,含有三種形式,在指定位置,插入乙個或者多個元素;如:
v1.insert(v1.begin() + 10 , 5);//在第
11個位置插入乙個元素值為5。
v1.insert(v1.begin() , v.begin() , v.end());//在
v1的開始將
v的元素依次插入到
v1中。
v2.insert(v2.begin() , 5 , 100) ;//在
v2的開頭插入5個
10013.max_size();//返回
vector
所能容納元素的最大數量(上限)
14.pop_back();//移除最後乙個元素
15.push_back();//在
vector
最後新增乙個元素
16.rbegin();//返回
vector
尾部的逆迭代器
17.rend();//返回
vector
起始的逆迭代器
18.reserve();//設定
vector
最小的元素容納數量
19.resize();//改變
vector
元素數量的大小,重新設定大小
20.size();//返回
vector
元素數量的大小
21.swap() ;//交換兩個
vector
,此處傳遞的是位址,不是值傳遞,按引用方式傳遞,會發生實際交換。
22.關於vector
的訪問方式
前面說過vector
的訪問方式就像陣列一樣,
vector
有三種訪問方式:
1. v.at(n) ;//訪問地
n個元素,此時要確保不能越界。
2. v[n] ;像陣列一樣直接訪問第
n個元素,同樣保證不能越界
3. 使用迭代器順序訪問:
vector::iterator it ;
for(it=v2.begin() ; it!=v2.end() ; it ++)
在使用迭代器的時候注意迭代器的使用範圍,特別是對於增刪操作的時候,尤其當心迭代器的範圍,很容易導致迭代器失效。並且迭代器的效率一般不是很高,如果可以使用下表形式,最好使用下標形式來遍歷以及操作物件中的元素。
vector的乙個簡單使用例子:
#include#include#include#includeusing namespace std ;
int main()
{ vectorv(10) ;
coutint i ;
i =0 ;
/* while(i < 10)
{ coutcout<::iterator it ;
for(it=v2.begin() ; it!=v2.end() ; it ++)
{ cout<<(*it) + 5<
關於vector
與stl
中的演算法的組合使用,會在後面的
stl演算法中繼續介紹。
STL總結之 vector容器
看黑板 vector,向量,封裝了陣列。內部實為乙個指標指向一塊連續的空間,當空間被放滿時,會自動申請一塊更大的空間,將原有的所有資料拷貝過來,並將上一塊空間釋放掉。由於是一塊連續的空間,故可以用下標訪問的方式進行隨機訪問。若專案中需要進行高頻率的訪問,則可以優先考慮vector。常用函式 1 尾部...
STL容器 Vector用法
標頭檔案 include 建立 vectorv 尾部插入元素 v.push back a 在第i 1個元素前面插入a v.insert v,begin i 刪除第i 1個元素 v.erase v,begin i 刪除區間 i,j 的元素 v.erase v.begin i,v.end j 下標訪問第...
C STL之vector用法總結
vector是表示可變大小陣列的序列容器。就像陣列一樣,vector也採用的連續儲存空間來儲存元素。也就是意味著可以採用下標對vector的元素進行訪問,和陣列一樣高效。但是又不像陣列,它的大小是可以動態改變的,而且它的大小會被容器自動處理。本質講,vector使用動態分配陣列來儲存它的元素。當新元...