#include<vector>头文件
vector类称作向量类
百度百科的解释:https://baike.baidu.com/item/vector/3330482
我喜欢把知识点拿出来实际操作。
提纲挈领的总结实际工程中用到的方式方法,最后列表展示出来,补充一些常用实际案例,最直接。
既方便看,又方便提取。
之前不了解动态数组vector的事,感觉像一座大山,没有办法迈过去。可是当深入的了解并使用到它的时候,觉得他真的是太便捷了。
比如说一般的数组a,一旦我们定义好了,就不能对里面的排序进行随意的增删改(或者说增删改的代价太大):
1.因为数组a在创建的时候,系统自动给它分配了一段固定长度内存,无法重定义数组的大小。
2.值写进去可以被抹掉,但那一段内存始终被占用着,无法实现「值没了,后1位变量前进一格」。
3.数组a可以被声明为空,如a[],但是在末尾添加数值还是很局限。而动态数组vec可以实现任意类型的push_back。
……
我目前探索到的动态数组vec:vec内变量个数可变,可随意插入,可随你删除,数组尾部添加动态变量很便利…
总之,很赞。
很初级的操作:
string类型 vector<string> s1; vector<string> s2; s1.push_back(s2); |
结构体类型 Struct ST st; vector<ST> st1; vector<ST> st2; st1.push_back(st2); |
迭代器访问,遍历 (类似指针) |
vector<int>::iterator it; for(it=vec.begin();it!= vec.end();it++) cout<<*it<<endl; |
vector遍历 |
for(int i=0; i<vec.size(); i++) |
常用的初始化及函数:
初始化vector |
vector<int>v1; |
初始化为空 |
vector<int>v2(v1); |
用另一个v1初始化v2 |
|
vector<int>v3(n, 3); vector<string>v3(5, "hello"); |
初始化为n个3 5个"hello" |
|
vector<int>v4(10); |
初始化为10个空值 |
|
int a[10]={1,2,3,4,5,6}; vector<int>v5(a,a+6); vector<int>v5(&a[0],&a[6]); |
初始化为:已有数组a[0,6),即a[0,5] |
|
增 |
vec.push_back(a); |
向vector尾部添加元素a |
vec.insert(pos,elem); |
在pos处插入elem iterator insert(iterator it,const T& x): |
|
vec.insert(pos,n,elem); |
在pos处插入n个elem insert(iterator it,int n,const T& x): |
|
vec.insert(pos,beg,end); |
在pos处插入[beg, end)区间的所有元素 insert(iterator it,const_iterator first,const_iterator last): |
|
删 |
vec.pop_back(); |
删除last最后一个元素 |
vec.clear(): |
清空所有元素 |
|
vec.erase(v.begin(),v.begin()+3); |
删除[first,last)中元素 erase(iterator first,iterator last): |
|
erase(iterator it): |
删除迭代器指向元素 |
|
遍历 |
vec.begin();地址 |
first返回头指针,指向第一个元素 |
vec.end();地址 |
last+1,返回尾指针,指向一个不存在元素 |
|
vec.front();值 |
返回首元素 |
|
vec.back();值 |
返回尾元素 |
|
vec.rbegin();地址 |
last返回尾指针,指向第一个元素 |
|
vec.rend();地址 |
first-1,返回首指针之前,指向一个不存在元素 |
|
vec.at(int pos); |
返回pos位置元素的引用 |
|
大小 |
vec.empty(); |
判断是否为空,空true,否则返回false; |
vec.size(); |
获取vector中元素个数 |
|
vec.capacity(); |
获取容器分配的存储空间 |
|
vec.resize(n+m); |
调整vec的大小变为n+m |
|
其他 |
加头文件#include<algorithm> |
—— |
sort(vec.begin(),vec.end()); |
对元素排序 |
|
reverse(vec.begin(), vec.end()); |
反转容器 |
|
swap(vec[i],vec[j]); |
交换元素 |
参考示例,见蒲公英110老师的文章。