C++向量類模板
向量(vector)時一種隨機訪問的數組類型,提供了對數組元素的快速、隨機訪問,以及在序列尾部快速、隨機的刪除和插入操作。它是大小可變的向量,在需要時可以改變其大小。
創建vector向量的方法:
#include<vector>
...
...
vector <type> v;
首先調用vector頭文件 #include< vector >
然後定義一個向量
vector表示聲明一個向量,< type >表示向量的類型,v表示向量名。
vector對象主要成員函數說明:
只是一些常用的,其它還有很多vector函數。
函數 | 說明 |
---|---|
at(n) | 返回向量中第n個元素 |
begin | 返回指向向量第一個元素的迭代器 |
end | 返回指向向量最後一個元素的迭代器 |
capcity | 返回向量的容量 |
size | 返回向量的大小 |
clear | 刪除向量中所有元素 |
erase(start,end) | 刪除迭代器從start到end範圍內的向量 |
erase(i) | 刪除迭代器第i個元素 |
insert(i,x) | 把值x插入到由迭代器指明的第i個位置 |
insert(i,start,end) | 把迭代器從start到end範圍的元素插入到指明的第i個位置 |
insert(i,n,x) | 把x的n個副本插入到由迭代器指明的第i個位置 |
push_back(x) | 將值x放到向量末尾 |
pop_back | 刪除向量最後一個元素 |
resize(n,x) | 設置向量大小爲n,初始值爲x |
reverse | 顛倒元素的順序 |
swap(vector) | 交換兩個向量的內容 |
實例
下面的實例承接上面的實例,建議順序閱讀。
1、定義向量並設定容量
vector<int>v1; //定義向量v1
v1.resize(10); //設定容量爲10
v1=vector<int>(8,7); //設定v1中有8個7的副本
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
輸出結果爲:
v1容量 :10
v1各項 :7 7 7 7 7 7 7 7
這裏給大家講一下capacity和size的區別,前者capacity代表最大容量,後者size代表當前的大小,例如v1.resize(10);v1=vector< int >(8,7);。那麼v1的容量是10,內部只有8個值,所以當前大小是8。
2、push_back(x)
v1.push_back(3); //將3放到向量末尾
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
輸出結果爲:
v1容量 :10
v1各項 :7 7 7 7 7 7 7 7 3
3、erase(i)
v1.erase(v1.end()-2);
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
v1.end代表最後一個元素的值7,v1.erase(v1.end()-2); 意思爲刪除迭代器第7-2個元素,也就是第i=5個元素,i=5,因爲i從0開始,所以實際上是刪除第6個元素。
輸出結果爲:
v1容量 :10
v1各項 :7 7 7 7 7 7 7 3
4、pop_back()
v1.pop_back(); //刪除最後一個元素
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
輸出結果爲:
v1容量 :10
v1各項 :7 7 7 7 7 7 7
5、swap(vector)
cout<<"創建v2"<<endl;
vector<int>v2;
v2.resize(10);
int a[8]={1,2,3,4,5,6,7,8};
v2=vector<int>(a,a+8);
cout<<"v2容量 :"<<v2.capacity()<<endl;
cout<<"v2各項 :";
for(int i=0;i<v2.size();i++)
cout<<v2[i]<<" ";
cout<<endl;
cout<<"v1.swap(v2)"<<endl;
v1.swap(v2); //交換v1、v2的內容
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
int a[8]={1,2,3,4,5,6,7,8};v2=vector(a,a+8);
這也是一種給vector賦值的方法,把數組a的初始地址到+8的地址賦值給向量v2。
輸出結果爲:
創建v2
v2容量 :10
v2各項 :1 2 3 4 5 6 7 8
v1.swap(v2)
v1容量 :10
v1各項 :1 2 3 4 5 6 7 8
6、resize(0)
cout<<"v1.resize(0)"<<endl;
v1.resize(0); //設置v1的容量爲0
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
v1.resize(8);
cout<<"v1.resize(8)"<<endl;
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
當v1.resize(0); 設置v1的容量爲0後,v1中的值全部歸0,但是,這並不影響v1.capacity()=10,因爲從程序開始到目前爲止,v1的容量最大時爲10。
輸出結果爲:
v1.resize(0)
v1容量 :10
v1各項 :
v1.resize(8)
v1容量 :10
v1各項 :0 0 0 0 0 0 0 0
六合一源代碼:
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int>v1;
v1.resize(10);
v1=vector<int>(8,7);
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
v1.push_back(3);
cout<<"v1.push_back(3)"<<endl;
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
v1.erase(v1.end()-2);
cout<<"v1.erase(v1.end()-2)"<<endl;
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
v1.pop_back();
cout<<"v1.pop_back()"<<endl;
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
cout<<"創建v2"<<endl;
vector<int>v2;
v2.resize(10);
int a[8]={1,2,3,4,5,6,7,8};
v2=vector<int>(a,a+8);
cout<<"v2容量 :"<<v2.capacity()<<endl;
cout<<"v2各項 :";
for(int i=0;i<v2.size();i++)
cout<<v2[i]<<" ";
cout<<endl;
cout<<"v1.swap(v2)"<<endl;
v1.swap(v2);
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
cout<<"v1.resize(0)"<<endl;
v1.resize(0);
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
v1.resize(8);
cout<<"v1.resize(8)"<<endl;
cout<<"v1容量 :"<<v1.capacity()<<endl;
cout<<"v1各項 :";
for(int i=0;i<v1.size();i++)
cout<<v1[i]<<" ";
cout<<endl;
}
結果圖: