c++vector基本函数、排序、查找用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c++vector基本函数、排序、查找⽤法vector⽤法⽬录:
1、基本⽤法:
头⽂件:
#include<vector>
定义vector:
整数型: vector<int>a;
字符型: vector<char>a;
字符串型: vector<string>a; (注意字符串型输⼊输出⽤cin和cout)
固定vector的⼤⼩:
vector<int>a(105);
在容器最后存⼊新元素:
for(int i=0;i<10;i++){
b.push_back(i);
}
将字符数组中的数据赋值给容器:
1、遍历赋值:
char a[MAX+5];
vector<char>vc;
cin>>a;
int la=strlen(a);
for(int i=0;i<la;i++)
vc.push_back(a[i]);
2、定义容器时赋值:
char a[MAX+5];
cin>>a;
int la=strlen(a);
vector<char>vc(a,a+la);
判断容器的长度:
printf("%d\n",b.size());
遍历容器中元素:
1、遍历输出
for(int i=0;i<vc.size();i++)
printf("%c",vc[i]);
printf("\n");
2、错误⽰例:
for(int i=vc.begin();i<vc.end();i++){
cout<<vc[i]<<" ";
}
cout<<endl;
清空容器、判断是否为空、删除最后元素:
清空容器: a.clear();//清空a中的元素
判断容器是否空:a.empty();//判断a是否为空,空则返回ture,不空则返回false
删除容器最后的元素: a.pop_back(); ///括号内不可以添加index删除指定元素
2、vector的删除操作
vector很好的⼀点就是可以实现删除操作,⽤它来做模拟很好实现。

1、函数使⽤:
vc.erase(vc.begin(),vc.end()); ///vc.erase()可以删除⼀个或多个元素
2、说明:
vc.erase()函数中添加的地址范围是左闭右开区间,删除内容后,如果后⾯还有元素,会⾃动补全空位。

3、注意:
///vc.erase()函数中不是直接加要删除的内容,下⾯例⼦是错误的。

vc.erase('a');
3、vector的sort排序(加#include<algorithm>头⽂件)
将元素从⼩到⼤的顺序排列(默认):
int c1[]={1,3,11,2,66,22,-10};
vector<int>c(c1,c1+7); ///赋初值
sort(c.begin(),c.end());
for(int i=0;i<c.size();i++){
printf("%d ",c[i]);
}
printf("\n");
重写cmp函数按要求排序:
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int x,int y) ///cmp函数传参的类型不是vector<int>型,是vector中元素类型,即int型
{
return x>y;
}
int main()
{
int c1[]={1,3,11,2,66,22,-10};
vector<int> c(c1,c1+7);
sort(c.begin(),c.end(),cmp);
for(int i=0;i<c.size();i++){
printf("%d ",c[i]);
}
printf("\n");
return 0;
}
vector<node>(结构体)的cmp函数与其类似
4、翻转vector中的所有元素:
int d1[]={1,3,11,2,66,22,-10};
vector<int> d(d1,d1+7);
reverse(d.begin(),d.end()); ///不是d.reverse()
for(int i=0;i<d.size();i++){
printf("%d ",d[i]);
}
printf("\n");
5、find()函数的⽤法:
int temp1[]={ 1,3,2,4,5,0 };
vector<int> temp(temp1,temp1+6);
vector<int>::iterator it=find(temp.begin(),temp.end(),3);///返回的是地址
int index=&*it-&temp[0];///放⼊迭代器中得到容器中的位置
printf("%d\n",index);
6、vector实战:(这⾥写的是我在最开始⽤vector时候犯的错误) vector没申请不能直接赋值
vector<int>a;
for(int i=0;i<10;i++){
a[i]=5; ///vector[i]根本没被申请,所以不可以直接赋值
}
vector<int>a;
for(int i=0;i<10;i++){
a.push_back(i); ///申请a[3]后,下⾯可以直接改变它的值
}
a[3]=6;
vector<int>a(10);///先申请⼀个⼤⼩为10的向量后也可以直接改变a[3]的值
a[3]=6;
(上⾯只是vector的⼀部分内容,后续会逐渐补充,不⾜请评论)。

相关文档
最新文档