vector(未完)

知识储备

阅读这篇文章前,你需要知道:

关联知识

相关文章

概念理解

vector,中文名向量,其实与向量半毛钱关系没有,可以理解为一个不定长数组,即你用多少空间它开多少空间(近似),用于不知道这个数组到底要存多少个元素,但都开满会MLE的情况,或封装一些函数时。

使用条件

//头文件
#include<vector>
//命名空间
using namespace std;
or
using std::vector;
//传参
vector<type> v;
//type 为v这个vector所存储的元素的类型

原理

初始是一个最大容量为0的数组,当加入的元素多于其最大容量时,它会在另一个地方开一个两倍最大容量的数组,再将原数组中的元素复制进去,由于有复制操作,所以当vector存的东西极其大时,vector使很慢的建议使用类函数resize

用法注意

  1. 并不是真正的你装一个东西,它开一个空间。
  2. 在数组下标越过其最大空间时会秒RE。
  3. 有一些操作会十分的慢,下文中将会提醒

类函数

构造函数

1.

vector<type> v;//此时v为一个空的数组且最大容量为0;
int main()
{
	vector<int> v;
	printf("size: %d\nmax_size: %d\nnumber: ",v.size(),v.capacity());
	for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
}

2.

vector<type> v(a,b)//a,b为两个同类型的指针,且b>=a,将区间[a,b)的值给v,v的最大容量为b-a;
int main()
{
	int a[]={0,1,2,3,4,5,6,7,8,9,10};
	vector<int> v1(a,a+5);
	vector<int> v2(a+5,a+11);
	puts("v1:");
	printf("size: %d\nmax_size: %d\nnumber: ",v1.size(),v1.capacity());
	for(vector<int>::iterator it=v1.begin();it!=v1.end();++it) printf("%d ",*it);
	puts("\n");
	puts("v2:");
	printf("size: %d\nmax_size: %d\nnumber: ",v2.size(),v2.capacity());
	for(vector<int>::iterator it=v2.begin();it!=v2.end();++it) printf("%d ",*it);
}

3.

vector<type> v(a,b);//在v中插入a个b,v的最大容量为a;
int main()
{
	vector<int> v(10,100);
	printf("size: %d\nmax_size: %d\nnumber: ",v.size(),v.capacity());
	for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
}

4.

vector<type> v(temp_v)//temp_v为另一个与v类型相同的vector,v的最大容量为temp_v中的元素个数。
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
	vector<int> temp_v(10,100);
	temp_v.push_back(5);
	vector<int> v(temp_v);
	printf("size: %d\nmax_size: %d\nnumber: ",v.size(),v.capacity());
	for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
}

operator =

类似构造函数4。

vector<int> v;
v=temp_v;
//将temp_v中的元素全部复制到v中,temp_v与v必须同类型;
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
	vector<int> temp_v(10,100);
	temp_v.push_back(5);
	vector<int> v;
	v=temp_v;
	printf("size: %d\nmax_size: %d\nnumber: ",v.size(),v.capacity());
	for(vector<int>::iterator it=v.begin();it!=v.end();++it) printf("%d ",*it);
}

interator

begin

得到vector的头指针,相当于普通数组的数组名。

int main()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	printf("%d",*v.begin());
}

end

得到vector的尾指针,这是一个指向空的指针,vector的最后一个元素的地址为v.end()-1。

int main()
{
	vector<int> v;
	v.push_back(6);
	v.push_back(7);
	printf("%d\n",v.end());
	printf("%d",*(v.end()-1));
}

rbegin

得到vector最后一个元素的指针。

int main()
{
	vector<int> v;
	v.push_back(6);
	v.push_back(7);
	printf("%d",*v.rbegin());
}

push_back

用于在这个vector的尾部插入一个元素。

vector<int> v;
v.push_back

posted @ 2017-11-18 21:02  尘染半生  阅读(132)  评论(0编辑  收藏  举报