C++標準庫vector容器

來源:互聯網
上載者:User

我們可以將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。

銷毀所有資料,釋放記憶體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.