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() 删除向量最后一个元素
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

扫描二维码关注公众号,回复: 8896315 查看本文章

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

发布了16 篇原创文章 · 获赞 30 · 访问量 2046

猜你喜欢

转载自blog.csdn.net/zhaizhaizhaiaaa/article/details/104093844