vector(未完)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector(未完)相关的知识,希望对你有一定的参考价值。
知识储备
阅读这篇文章前,你需要知道:
- 什么是STL
-
关联知识
-
相关文章
-
概念理解
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\\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
以上是关于vector(未完)的主要内容,如果未能解决你的问题,请参考以下文章