知识储备
阅读这篇文章前,你需要知道:
关联知识
相关文章
概念理解
vector,中文名向量,其实与向量半毛钱关系没有,可以理解为一个不定长数组,即你用多少空间它开多少空间
(近似),用于不知道这个数组到底要存多少个元素,但都开满会MLE的情况,或封装一些函数时。
使用条件
//头文件
#include<vector>
//命名空间
using namespace std;
or
using std::vector;
//传参
vector<type> v;
//type 为v这个vector所存储的元素的类型
原理
初始是一个最大容量为0的数组,当加入的元素多于其最大容量时,它会在另一个地方开一个两倍最大容量的数组,再将原数组中的元素复制进去,由于有复制操作,所以当vector存的东西极其大时,vector使很慢的,建议使用类函数resize。
用法注意
- 并不是真正的你装一个东西,它开一个空间。
- 在数组下标越过其最大空间时会秒RE。
- 有一些操作会十分的慢,下文中将会提醒。
类函数
构造函数
1.
vector<type> v;//此时v为一个空的数组且最大容量为0;
int main()
{
vector<int> v;
printf("size: %d
max_size: %d
number: ",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
max_size: %d
number: ",v1.size(),v1.capacity());
for(vector<int>::iterator it=v1.begin();it!=v1.end();++it) printf("%d ",*it);
puts("
");
puts("v2:");
printf("size: %d
max_size: %d
number: ",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
max_size: %d
number: ",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
max_size: %d
number: ",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
max_size: %d
number: ",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
",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