C++复习vector

故事扮演 提交于 2020-02-04 13:40:34

 动态数组vector

 


1、创建:

  1. vector<int>v;
  2. vector<int>v1; vector<int>v2(v1) vector<int>v2 = v1;
  3. vector<int>v = {1,3,5,7,9}; vector<int>v{1,3,5,7,9};
  4. vector<int>v1{1,3,5,7,9}; vector<int>v2(v1.begin()+1,v1.end()-1); 即 v2 = {3, 5, 7};
  5. vector<int>v(4); 创建了一个容量为4的容器 v
  6. vector<int>(4,0); v 中初始有4个值为0的元素

  二维数组

  1. vector<int>v[n]
  2. vector<vector<int> >v;

2、使用:

  • 常用
  • v.push_back(a);       //将a添加到 v 的末尾
  • v.size();                    //返回 v 的元素个数
  • v.clear();                   //清空 v v中的元素
  • v.empty();                 //若 v 为空则返回true,否则返回false
  • v.begin() & v.end();   //返回 v 头尾的迭代器
  • 赋值
  • 直接赋值:v1 = v2;
  • 使用assign函数
  •         v1.assign(v1.begin()+2, v2.end()-1);
  •         v1.assign(6,1)                    // v 只含6个元素,每个元素为1
  • v1.swap(v2)                               //将 v1 与 v2 的元素进行整体交换
  • 插入
  • v.insert(v.begin()+1,5);               //在 v 的第一个参数下标序号前插入5({1,2,3} ——>{1,5,2,3})
  • v.insert(a.begin()+1,2,4);            //在v的第1个元素的位置插入2个数,其值都为4
  • v.insert(v.begin()+2,a+2,a+7);    //在 v 的第二个元素前插入数组 a 的第2到第6个元素
  • 删除
  • v.pop_back();                              //删除 v 的最后一个元素
  • v.erase(v.begin()+i);                    //删除第i个元素
  • v.erase(v.begin()+i, v.begin()+j); //删除第i到第j个元素,不包括第j个元素
  • 扩容
  • v.capacity();                                //返回 v 在内存中总共可以容纳的元素个数
  • v.resize(10);                               //将 v 的现有元素个数调至10个,多则删,少则补,其值随机 
  • v.resize(10,2);                            //将 v 的现有元素个数调至10个,多则删,少则补,其值为2

3、操作

  • 访问
  • 1、v[i]
  • 2、vector<int>::iterator it = v.begin();     //    auto it = v.begin();
  • cout << *it;
  • 遍历
  • 第1种
  • for(int i=0;i<v.size();i++)
  • cout << v[i] << endl; 
  • 第2种
  • for(vector<int>::iterator it=v.begin();it<v.end();it++)
  • cout << *it << endl;
  • 第3种
  • for(auto i : v)
  • cout << i << endl                        //链接auto
  • 第4种
  • for_each循环
  • #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    using namespace std;
    struct Play{
        Play(string t) : str(t){} 
        bool operator()(string s){
    //        str += s;
            cout << str << s << endl;
        }
        string str;
    }; //第一种 
    void print(string &s){
        cout << s << endl;
    } //第二种 
    vector<string>v{"0","123","456","789","结束"};
    int main(){
        for_each(v.begin(),v.end(),Play("name="));
        for_each(v.begin(),v.end(),print);
        return 0;
    }
    View Code

     

  • v.front() 返回v的第一个元素,v.back() 返回v的最后一个元素
  • 排序
  • sort函数
  • #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    struct student{
        int grade;
        char name[10];
        bool operator < (const student &s) const{
            if(grade != s.grade)return grade < s.grade;
            else return strcmp(name,s.name) < 0; 
        } //第一种,重载小于号 
    };
    bool cmp(student a, student b){
        if(a.grade != b.grade)return a.grade < b.grade;
        else return strcmp(a.name,b.name) < 0;
    }     //第二种,另外写函数 
    int main(){
        vector<int>v;
        vector<student>u;
        sort(v.begin(),v.end()); //从小到大(默认) 
        sort(v.begin(),v.end(),less<int>() ) //从小到大
        sort(v.begin(),v.end(),greater<int>() ) //从大到小
        sort(u.begin(),u.end()); //第一种 
        sort(u.begin(),u.end(),cmp); //第二种 
    }
    View Code

     

  • 查找

  • find 函数
  • find(v.begin(),v.end(),x)  ,返回x在 v 中的索引(迭代器),否则返回v.end();
  • find_if函数
  • #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    using namespace std;
    struct student{
        int age;
        string name;
    }; 
    struct Play{
        Play(int t) : age(t){} 
        bool operator()(student &he){
            return he.age > age;
        }
        int age;
    }; //第一种 
    bool cmp(student &s){
        return s.age > 18;
    } //第二种 
    int main(){
        vector<student>v(4);
        v[1] = {1,"Tom"};
        v[2] = {12,"Mark"};
        v[3] = {19,"Rose"};
        auto it = find_if(v.begin()+1,v.end(),Play(18));
        auto it = find_if(v.begin()+1,v.end(),cmp);
        cout << it->name;
        return 0;
    }
    View Code

     

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!