1. 程式人生 > >vector容器的使用方法

vector容器的使用方法

這個網上隨便都有啦,google一下,應有盡有。

說明

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

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

構造:

  這個建構函式還有一個可選的引數,這是一個型別為T的例項,描述了各個向量種各成員的初始值;

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

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

  如:vector<int>v3(v2); 

· 帶兩個常量引數的建構函式,產生初始值為一個區間的向量。區間由一個半開區間

[first,last](MSword的顯示可能會有問題,first前是一個左方括號,last後面是一個右圓括號)來指定。

  如:vector<int>v4first,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。將nelem的拷貝賦值給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位置插入nelem資料,無返回值 

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)// c1c2元素互換

例子:

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

//stl_cpp_8.cpp

    #include<iostream> 
  #include<vector> 
  usingnamespace std; 
  typedefvector<int> INTVECTOR;//自定義型別INTVECTOR 
  //測試vector容器的功能
  voidmain(void) 
  { 
  //vec1物件初始為空
  INTVECTORvec1; 
  //vec2物件最初有10個值為6的元素
  INTVECTORvec2(10,6); 
  //vec3物件最初有3個值為6的元素,拷貝構造
  INTVECTORvec3(vec2.begin(),vec2.begin()+3); 
  //宣告一個名為i的雙向迭代器
  INTVECTOR::iteratori; 
  //從前向後顯示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.insert(vec1.begin()+1,5);//在vec1第一個的位置上插入成員5 
  //從vec1第一的位置開始插入vec3的所有成員
  vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());
  cout<<"afterpush() 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()實際上是取末尾加一,以便讓迴圈正確執行--返回的指標指向最靠近陣列界限的資料。