vector容器的使用方法
這個網上隨便都有啦,google一下,應有盡有。
說明
vector是一種動態陣列,是基本陣列的類模板。其內部定義了很多基本操作。
#include<vector> 注意:標頭檔案沒有“.h”
構造:
這個建構函式還有一個可選的引數,這是一個型別為T的例項,描述了各個向量種各成員的初始值;
如:vector<int>v2(init_size,0); 如果預先定義了:intinit_size;他的成員值都被初始化為0;
,構造一個新的向量,作為已存在的向量的完全複製;
如:vector<int>v3(v2);
· 帶兩個常量引數的建構函式,產生初始值為一個區間的向量。區間由一個半開區間
如: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)//
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(),,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()實際上是取末尾加一,以便讓迴圈正確執行--它返回的指標指向最靠近陣列界限的資料。