STL vector

STL vector

vector 類中定義了4中種構造函式:· 默認構造函式,構造一個初始長度為0的空向量,如:vector v1; · 帶有單個整形參數的構造函式,此參數描述了向量的初始大小。

說明

vector是一種動態數組,是基本數組的類模板。其內部定義了很多基本操作。

#include <vector> 注意:頭檔案沒有“.h”

構造

這個構造函式還有一個可選的參數,這是一個類型為T的實例,描述了各個向量中各成員的初始值

如:vector<int> v2(init_size,0); 如果預先定義了:int init_size;他的成員值都被初始化為0;

· 複製構造函式,構造一個新的向量,作為已存在的向量的完全複製;

如:vector<int> v3(v2);

· 帶兩個常量參數的構造函式,產生初始值為一個區間的向量。 區間由一個半開區間[first,last)(MS word的顯示可能會有問題,first前是一個左方括弧,last後面是一個右圓括弧)來指定。

如:vector<int> v4(first,last) vector<int> v1;

vector<int> v2(init_size,0);

vector<int> v3(v2);

方法

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) // 刪除pos位置的數據,傳回下一個數據的位置。

c.erase(beg,end) 刪除[beg,end)區間的數據,傳回下一個數據的位置。

c.front()    傳回第一個數據。

get_allocator  使用構造函式返回一個拷貝。

c.insert(pos,elem) // 在pos位置插入一個elem拷貝,傳回新數據位置

c.insert(pos,n,elem) // 在pos位置插入n個elem數據,無返回值

c.insert(pos,beg,end) // 在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) // 將c1和c2元素互換

例子

為了幫助理解向量的概念,這裡寫了一個小例子,其中用到了vector的成員函式:begin(),end(),push_back(),assign(),front(),back(),erase(),empty(),at(),size()。

//stl_cpp_8.cpp

#include <iostream>

#include <vector>

using namespace std;

typedef vector<int> INTVECTOR;//自定義類型INTVECTOR

//測試vector容器的功能

void main(void)

{

//vec1對象初始為空

INTVECTOR vec1;

//vec2對象最初有10個值為6的元素

INTVECTOR vec2(10,6);

//vec3對象最初有3個值為6的元素,拷貝構造

INTVECTOR vec3(vec2.begin(),vec2.begin()+3);

//聲明一個名為i的雙向疊代器

INTVECTOR::iterator i;

//從前向後顯示vec1中的數據

cout<<"vec1.begin()--vec1.end():"<<endl;

for (i =vec1.begin(); i !=vec1.end(); ++i)

cout << *i << " ";

cout << endl;

//從前向後顯示vec2中的數據

cout<<"vec2.begin()--vec2.end():"<<endl;

for (i =vec2.begin(); i !=vec2.end(); ++i)

cout << *i << " ";

cout << endl;

//從前向後顯示vec3中的數據

cout<<"vec3.begin()--vec3.end():"<<endl;

for (i =vec3.begin(); i !=vec3.end(); ++i)

cout << *i << " ";

cout << endl;

//測試添加和插入成員函式,vector不支持從前插入

vec1.push_back(2);//從後面添加一個成員

vec1.push_back(4);

//從vec1第一的位置開始插入vec3的所有成員

vec1.insert(vec1.begin(),vec3.begin(),vec3.end());

cout<<"after push() and insert() now the vec1 is:" <<endl;

for (i =vec1.begin(); i !=vec1.end(); ++i)

cout << *i << " ";

cout << endl;

//測試賦值成員函式

vec2.assign(8,1); // 重新給vec2賦值,8個成員的初始值都為1

cout<<"vec2.assign(8,1):" <<endl;

for (i =vec2.begin(); i !=vec2.end(); ++i)

cout << *i << " ";

cout << endl;

//測試引用類函式

cout<<"vec1.front()="<<vec1.front()<<endl;//vec1第零個成員

cout<<"vec1.back()="<<vec1.back()<<endl;//vec1的最後一個成員

cout<<"vec1. at(4)="<<vec1. at(4)<<endl;//vec1的第五個成員

cout<<"vec1[4]="<<vec1[4]<<endl;

//測試移出和刪除

vec1.pop_back();//將最後一個成員移出vec1

vec1.erase(vec1.begin()+1,vec1.end()-2);//刪除成員

cout<<"vec1.pop_back() and vec1.erase():" <<endl;

for (i =vec1.begin(); i !=vec1.end(); ++i)

cout << *i << " ";

cout << endl;

//顯示序列的狀態信息

cout<<"vec1.size(): "<<vec1.size()<<endl;//列印成員個數

cout<<"vec1.empty(): "<<vec1.empty()<<endl;//判斷vec1是否為空,空則返回1,不空返回0

}

push_back()是將數據放入vector(向量)或deque(雙端佇列)的標準函式。Insert()是一個與之類似的函式,然而它在所有容器中都可以使用,但是用法更加複雜。end()實際上是取末尾加一,以便讓循環正確運行--它返回的指針指向最靠近數組界限的數據。

相關詞條

熱門詞條

聯絡我們