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
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;
}
结果图: