說明
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()實際上是取末尾加一,以便讓循環正確運行--它返回的指針指向最靠近數組界限的數據。