我們可以將vector看成是數組的升級,是廣義上的數組並且資料類型自己定義,數組元素個數不限
vector的定義方式:vector<類型> 變數名
初始化方式:
vector<T> v1 //預設建構函式v1為空白
vector<T> v2(v1) //v2成為v1的副本
vector<T> v3(n,i) //v3含有n個i元素
vector<T> v4(n) //v4含有初始化的元素的個副本
在第三種初始化方式中有元素個數和元素值確定了一個vector對象,vector對象而言它希望達到的目的是動態分配記憶體,增加元素,而不是預先確定記憶體大小
vector對象的操作
v.empty() //若v為空白,返回true,否則返回false
v.size() //返回v的當前元素個數
v.push_back() //在v的末尾插入一個元素
v[n] //訪問v中的第n個元素
v1=v2 //將v1中元素替換為v2的元素
==,!=,<,<=,>=,> //都保留慣有的意義
與string類似的v.size()傳回值也是size_type類型的
對vector對象可以採用下表訪問的方式vector<int> kk; kk[n]
for(vector<int>::size_type num=0;num!=10;num++)
採用!=來作為判定條件是安全的,這個也是c++和c不同之處,沒有採取防止溢出<=作為條件
但是下標表示[]僅能提取確實已存在的元素(即可以理解為在數組中不能越界訪問一樣),尤其是當剛定義一個vector對象時,預設的對象的元素個數為0,此時的下標訪問會出現錯誤
一般c++程式員都是用迭代器作為訪問容器的工具
vector<T>::iterator v1;
每一個容器都有begin和end函數用來返回迭代器,begin函數將返回指向第一個元素的迭代器,而end函數則返回指向最後一個元素的後一位的迭代器
可以通過解引用操作符(*)訪問迭代器指向的元素,並且迭代器具有自加功能,就是指向容器中的下一位,由end函數的傳回值可知不能對end函數的傳回值用*進行訪問
vector<T> kk;
for(vector<T>::iterator k=kk.begin();k!=kk.end();k++)
通過如此遍曆整個容器,在此處是用!=也是安全的(其實我們可以將迭代器看成是指標,一類用來遍曆vector容器的指標)
函數 |
表述 |
c.assign(beg,end) c.assign(n,elem) |
將[beg; end)區間中的資料賦值給c。 將n個elem的拷貝賦值給c。 |
c.at(idx) |
傳回索引idx所指的資料,如果idx越界,拋出out_of_range。 |
c.back() |
傳回最後一個資料,不檢查這個資料是否存在。 |
c.begin() |
傳回迭代器重的可一個資料。 |
c.capacity() |
返回容器中資料個數。 |
c.clear() |
移除容器中所有資料。 |
c.empty() |
判斷容器是否為空白。 |
c.end() |
指向迭代器中的最後一個資料地址。 |
c.erase(pos) c.erase(beg,end) |
刪除pos位置的資料,傳回下一個資料的位置。 刪除[beg,end)區間的資料,傳回下一個資料的位置。 |
c.front() |
傳回地一個資料。 |
get_allocator |
使用建構函式返回一個拷貝。 |
c.insert(pos,elem) c.insert(pos,n,elem) c.insert(pos,beg,end) |
在pos位置插入一個elem拷貝,傳回新資料位元置。 在pos位置插入n個elem資料。無傳回值。 在pos位置插入在[beg,end)區間的資料。無傳回值。 |
c.max_size() |
返回容器中最大資料的數量。 |
c.pop_back() |
刪除最後一個資料。 |
c.push_back(elem) |
在尾部加入一個資料。 |
c.rbegin() |
傳回一個逆向隊列的第一個資料。 |
c.rend() |
傳回一個逆向隊列的最後一個資料的下一個位置。 |
c.resize(num) |
重新指定隊列的長度。 |
c.reserve() |
保留適當的容量。 |
c.size() |
返回容器中實際資料的個數。 |
c1.swap(c2) swap(c1,c2) |
將c1和c2元素互換。 同上操作。 |
vector<Elem> c vector <Elem> c1(c2) vector <Elem> c(n) vector <Elem> c(n, elem) vector <Elem> c(beg,end) c.~ vector <Elem>() |
建立一個空的vector。 複製一個vector。 建立一個vector,含有n個資料,資料均已預設構造產生。 建立一個含有n個elem拷貝的vector。 建立一個以[beg;end)區間的vector。 銷毀所有資料,釋放記憶體。 |