C++向量類模板

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;
} 

結果圖:
vector

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章