• vector容器 (20221115)


    一、vector容器

    1、功能:与数组非常相似,也称为单端数组。

    2、区别:数组是静态空间,vector可以动态扩展。

    动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,将原数据拷贝到新空间,释放原空间。

    3、vector迭代器是支持随机访问的迭代器

    4、构造函数

    5、vector的容量和大小

    函数原型:

    empty(); 判断元素是否为空

    capacity(); 容器的容量

    size(); 返回容器中元素个数

    resize(int num);重新指定容器的长度num,若变长,则以默认值填充,若变短,则删除超出容器长度的元素

    resize(int num,elem); 重新指定容器的长度num,若变长,则以elem填充,若变短,则删除超出容器长度的元素.

    6、vector的插入和删除

    push_back(ele); 尾部插入

    pop_back();尾部删除

    insert(const_iterator pos,ele); 迭代器指向位置pos插入元素ele

    insert(const_iterator pos,int count,ele); 迭代器指向位置pos插入count个元素ele

    erase(const_iterator pos); 删除迭代器指向元素

    erase(const_iterator start, const_iterator end); 删除迭代器指向区间元素

    clear();删除容器中全部元素

    7、vector的数据存取

    at(int idx); //返回容器中idx所指的数据

    operator[]; //返回索引idx所指的数据

    front(); //返回容器第一个数据元素

    back();//返回最后一个元素

    代码:

    1. #include
    2. using namespace std;
    3. #include
    4. void printVector(vector<int>&v)
    5. {
    6.     for (int i = 0; i < v.size(); i++)
    7.     {
    8.         cout << v[i] << " ";
    9.     }
    10.     cout << endl;
    11.     for (int i = 0; i < v.size(); i++)
    12.     {
    13.         cout << v.at(i) << " ";
    14.     }
    15.     cout << endl;
    16. }
    17. void test01()
    18. {
    19.     vector<int>v1;
    20.     for (int i = 0; i < 10; i++)
    21.     {
    22.         v1.push_back(i);
    23.     }
    24.     printVector(v1);
    25.     //输出第一个元素
    26.     cout << "第一个元素为:" << v1.front() << endl;
    27.     cout << "最后一个元素为:" << v1.back() << endl;
    28. }

    8、vector互换容器

    实现两个容器的互换

    函数原型:swap(vec);//将vec与本身的元素互换

    代码:

    1. void printVector(vector<int>&v)
    2. {
    3.     for (int i = 0; i < v.size(); i++)
    4.     {
    5.         cout << v[i] << " ";
    6.     }
    7.     cout << endl;
    8.     for (int i = 0; i < v.size(); i++)
    9.     {
    10.         cout << v.at(i) << " ";
    11.     }
    12.     cout << endl;
    13. }
    14. void test01()
    15. {
    16.     vector<int>v1;
    17.     for (int i = 0; i < 10; i++)
    18.     {
    19.         v1.push_back(i);
    20.     }
    21.     cout << "交换前" << endl;
    22.     printVector(v1);
    23.     vector<int>v2;
    24.     for (int i = 11; i < 20; i++)
    25.     {
    26.         v2.push_back(i);
    27.     }
    28.     printVector(v2);
    29.     cout << "交换后:" << endl;
    30.     v1.swap(v2);
    31.     printVector(v1);
    32.     printVector(v2); 
    33. }

    效果:

    实际作用:

    1. 巧用swap()可以收缩内存空间:
    2. void test02()
    3. {
    4.     vector<int>v3;
    5.     for (int i = 0; i < 100000; i++)
    6.     {
    7.         v3.push_back(i);
    8.     }
    9.     cout << "v3的大小为:" << v3.size() << endl;
    10.     cout << "v3的容量为:" << v3.capacity()<< endl;
    11.     //重新指定大小
    12.     v3.resize(3);
    13.     cout << "v3的大小为:" << v3.size() << endl;
    14.     cout << "v3的容量为:" << v3.capacity() << endl; //此时大小为3  容量为138255 浪费空间
    15.     //用swap收缩内存
    16.     vector<int>(v3).swap(v3);
    17.     //vector(v3)是以v3作为拷贝对象,拷贝构造一个匿名对象,
    18.     //然后做一个容器之间的交换,交换后v3指向的是交换前匿名对象所指向的空间,容量为3,而匿名对象指向的是原本v3的空间,容量大小为138255
    19.     //匿名对象的特点:使用完毕后 系统会自动回收其空间
    20.     cout << "v3的大小为:" << v3.size() << endl;
    21.     cout << "v3的容量为:" << v3.capacity() << endl;//此时大小为3  容量为3 浪费空间
    22. }

    9、预留空间

    功能:减少vector在动态扩展时的扩展次数

    reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。

    1. //利用reserve预留空间
    2. void test02()
    3. {
    4.     vector<int>v;
    5.     int num=0;//统计开辟次数
    6.     v.reserve(100000);
    7.     int *p = NULL;
    8.     for (int i = 0; i < 100000; i++)
    9.     {
    10.         v.push_back(i);
    11.         if (p != &v[0])//如果p不指向首地址,则使其指向首地址
    12.         {
    13.             p = &v[0];
    14.             num++;
    15.         }
    16.     }
    17.     cout << "次数:" << num << endl; //没有预留 num=30 预留后num=1
    18. }

  • 相关阅读:
    抖店运营需要多少资金,最新入驻费用详解!
    史上最全的Redis基础+进阶项目实战总结笔记
    2 Zookeeper 单击安装
    『Linux - gcc / g++』c程序翻译过程
    Python基于Flask的高校舆情分析,舆情监控可视化系统
    火爆全网的“羊了个羊”,疯狂圈钱2400多万,背后隐藏着什么?
    【网络篇】第二篇——IP协议与MAC地址详解
    Python——弹幕词频统计及其文本分析(绘制词云)(含源代码)
    Kotlin 开发Android app(四):Kotlin 四大容器Set,Array,List,Map
    MindSpore新型轻量级神经网络GhostNet,在ImageNet分类、图像识别和目标检测等多个应用场景效果优异!
  • 原文地址:https://blog.csdn.net/qq_60143666/article/details/127865909