C++标准模板库vector的常用操作分享!

一:介绍

vector是C++标准模板库,是一个容器,底层是数组,为连续内存。

命名空间为std,所属头文件为<vector>   注意:不是<vector.h>

vector存储数据时,会分配一个存储空间,如果继续存储,该分配的空间已满,就会分配一块更大的内存,把原来的数据复制过来,继续存储,这些性能也会一定程度上会有损耗

二:常用操作

容量:

修改:

迭代器:

访问元素:

三:存储

简单存储

    //存储方式1    vector<int> v1(10);    for (int i=0; i<10; i++)    {      v1[i] = i;    }    //存储方式2    vector<int> v2;    for (int i=0; i<10; i++)    {      v2.push_back(i);    }

存储结构体和结构体指针

    struct Student    {      char name[32];      int age;    };    //存储结构体    vector<Student> vStu1;    for (int i=0; i<10; i++)    {      Student stu;      strcpy(stu.name, "woniu201");      stu.age = 30 + i;      vStu1.push_back(stu);    }    //存储结构体指针    vector<Student*> vStu2;    for (int i=0; i<10; i++)    {      Student* pStu = (Student*)malloc(sizeof(Student));      strcpy(pStu->name, "woniu201");       pStu->age = 30 + i;       vStu2.push_back(pStu);     }

四:vector遍历

    vector<int> v;    for (int i=0; i<100; i++)    {      v.push_back(i);    }    //遍历方式1    for (int i=0; i<100; i++)    {      int& a = v[i];      printf("%d ", a);    }    //遍历方式2    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)    {      int&a = *it;      printf("%d ", a);    }

五:排序

对vector整形进行排序

  #include "stdlib.h"  #include <vector>  #include <algorithm>  using namespace std;  //升序比较函数  int compare1(const int &a, const int &b)  {    return a < b;  }  //降序比较函数  int compare2(const int &a, const int &b)  {    return a > b;  }  int main()  {    vector<int> v;    for (int i=0; i<10; i++)    {      v.push_back(rand() % 10);    }    //遍历输出    printf("排序前数据:");    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)    {      printf("%d ", *it);    }    //升序排序    sort(v.begin(), v.end(), compare1);    //遍历输出    printf("n升序后数据:");    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)    {      printf("%d ", *it);    }    //降序排序    sort(v.begin(), v.end(), greater<int>());    //遍历输出    printf("n降序后数据:");    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)    {      printf("%d ", *it);    }    getchar();    return 1;  }

对存放类成员变量排序

  #include <string>  #include <vector>  #include <algorithm>  using namespace std;  class Student {  public:      Student(string n, int c) :name(n), core(c) {}    string  name;    int    core;  };  //升序比较函数  bool compare1(const Student& s1, const Student& s2)  {    return s1.core < s2.core;  }  //降序比较函数  bool compare2(const Student& s1, const Student& s2)  {    return s1.core > s2.core;  }  int main()  {    vector<Student> v;    Student s1("aaaa", 97);    Student s2("bbbb", 99);    Student s3("cccc", 95);    v.push_back(s1);    v.push_back(s2);    v.push_back(s3);    printf("排序前数据:n");    for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)    {      printf("%s; %dn", ((*it).name).c_str(), (*it).core);    }    //升序排序    sort(v.begin(), v.end(), compare1);    printf("n升序后的数据:n");    for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)    {      printf("%s; %dn", ((*it).name).c_str(), (*it).core);    }    //降序排序    sort(v.begin(), v.end(), compare2);    printf("n降序后的数据:n");    for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)    {      printf("%s; %dn", ((*it).name).c_str(), (*it).core);    }    getchar();    return 1;  }

六:查找

    vector<int>::iterator it = find(v.begin(), v.end(), 5);    if(it != v.end())    {      cout << "found";    }    else    {      cout << "not found";    }

七:删除

    for(vector<int>::iterator it=v.begin(); it != v.end(); it++)    {      if(*it == 8)      {        it = v.erase(it);//it会++一次        it--;    //删除完后需要--,否则最终循环越界      }    }

八:释放内存

存放整形vector释放

   //存放整型   vector<int> v;   for (int i=0; i<100; i++)   {   v.push_back(i);   }    //释放内存    {      vector<int> vEmpty;      v.swap(vEmpty);    }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/482609.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐