美文网首页C++
vector小结

vector小结

作者: 埠默笙声 | 来源:发表于2017-02-23 22:19 被阅读117次
    一只名为vector的蜂巢
    vector是使用频率非常高的一个容器,经过一段时间的学习,是时候做个小结了。贴一些好用的链接和帖子:
    1.比较简明的英文介绍:std::vector
    2.中文帖子:vector的成员函数解析
    3.适合后续深入了解: C++存储数据结构之三vector

    基本用法

    1.头文件及声明

    #include<vector>
    using std::vector;
    

    2.创建vector对象

    vector<int> vec;//默认构造
    vector<int> vec1(vec);//复制构造
    vector<int> vec2(n,I);//vec2初始化为n个元素I
    vector<int> vec3(n);//vec3初始化为n个int类型的缺省值
    

    3.尾部插入元素 vec.push_back(a);
    4.使用下标访问元素 cout << vec[0] <<endl;
    5.使用迭代器访问元素

    vector<int>::iterator it;
    for(it=vec.begin();it!=vec.end();it++) {
        cout<<*it<<endl;
    }
    

    6.插入元素:vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a
    7.删除元素:vec.erase(vec.begin()+2); //删除第3个元素
    8.返回容器大小:cout << vec.size() <<endl;
    9.重新定义容器大小:vec.resize(n);
    10.清空容器:vec.clear();


    相关算法

    1.使用reverse将元素翻转:头文件#include<algorithm>;声明using std::reverse;.

    reverse(vec.begin(),vec.end());
    //将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)
    

    2.使用sort排序:头文件#include<algorithm>;声明using std::sort;.

    sort(vec.begin(),vec.end());
    //默认升序排列
    

    第三个参数可以用lambada表达式选择升降序:

    sort(
      vec.begin(),
      vec.end(),
      [](int x, int y){ return x >= y; }//降序排列
    );
    

    应用:动态的二维数组

    • 行定长,列动态
    vector<vector<int> > vec(10);
    //vec初始化为10个vector<int>类型缺省值,每一个都是一个空的动态数组.
    for(int i=0;i<5;i++) {
        vec[5].push_back(i);
    }
    
    • 行,列都动态
      • 用户输入行数
    cin >> n;
    vector<vector<int> > vec(n);
    
    • 用户不输入行数
      例如要求用户录入各班级的学生的学号和成绩,但用户并不知道有多少个班,只是想录完一定数量的班级后,自己结束输入(比如输入-1)。
    //假设已有Student类
    vector<vector<Student> > Class;
        int classID = 1;
        int n;
        while(1) {
            //输入班级学生人数
            cin >> n;
            if(n == -1)break;
            Class.resize(classID);
            //输入所有学生的信息
            Student input;
            for(int i=0;i<n;i++) {
                cin >> input.ID >> input.score;
                Class[classID].push_back(input);
            }
            //准备输入下一个班级
            classID++;
        }
    

    输入例子:
    3 1237 90 1238 70 1239 60 2 1367 78 1368 92 -1
    以上,只要用户不输入-1自行结束,行就会自增,是不是很酷呢?_

    相关文章

      网友评论

        本文标题:vector小结

        本文链接:https://www.haomeiwen.com/subject/ckbvwttx.html