zoukankan      html  css  js  c++  java
  • c++ vector基本函数、排序、查找用法

    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
    ",b.size());

    遍历容器中元素:

    1、遍历输出    
        for(int i=0;i<vc.size();i++)
            printf("%c",vc[i]);
         printf("
    ");
    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("
    ");

    重写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("
    ");
        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("
    ");

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

  • 相关阅读:
    pycharm2017.3.7的安装
    SVN Working Copy xxx locked 并 cleanup失败之解
    Lua查找字符串注意
    Lua运算符
    Python操作Excel
    项目中碰到的Ajax相关的问题记录
    线程的相关概念
    val()用法和value的区别
    JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化
    算法复杂度相关概念
  • 原文地址:https://www.cnblogs.com/ldu-xingjiahui/p/12407379.html
Copyright © 2011-2022 走看看