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

21 篇文章 1 订阅

终于把自己的个人博客安排上啦!

欢迎访问我的个人博客 XJHui's Blog

vector用法目录:

1、基本用法

2、vector的删除操作

3、vector的sort排序

4、翻转vector中的所有元素

5、find()函数的用法

6、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的一部分内容,后续会逐渐补充,不足请评论)

如果对博客搭建感兴趣可以看我另一篇博客:Hexo博客框架攻略

也欢迎到我的个人博客评论、留言:XJHui's Blog

  • 20
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值