• 【C++】泛型算法(四)使用顺序性容器


    一、顺序性容器

    顺序性容器用来维护一组有序、类型相同的元素。
    主要是:vector和list。

    1.vector

    1. vector是用一块连续的内存存放数据;
    2. vector进行随机访问,效率比较高(适合数列);
    3. vector对于插入和删除操作效率较低:这是由于vector内的每个元素都被存储在距离起始点固定的偏移位置,当进行插入操作时,如果插入的位置不是vector的尾端,那么就需要把插入位置右端的数据复制一份在右移;删除操作同理。

    2.list

    1. list容器是双向链接(double-linked);
    2. 和vector的区别:并非用连续内存空间存储数据
    3. list容器中每个元素包含三个部分:value、back(指向前一个元素)、front(指向下一个元素);
    4. 对list进行任意位置的插入和删除操作,效率较高。

    3.deque

    1. deque容器和vector类似,都是以连续内存存储元素;
    2. deque容器和vector区别:deque可以进行最前端元素的插入和删除操作。

    二、头文件

    #include 
    #include 
    #include 
    
    • 1
    • 2
    • 3

    三、定义顺序性容器对象的方式

    1.产生空的容器

    list<string> slist;
    vector<int> ivec;
    
    • 1
    • 2

    2.产生特定大小的容器

    每个元素都以其默认值作为初值。
    (int 和double这类语言内置的算术类型,其默认值为0)

    list<string> ilist(1024);
    vector<int> svec(32);
    
    • 1
    • 2

    3.定义特定大小的容器,并为每个元素指定初值

    vector<int> ivec(10-1);
    list<string> slist(16,“unassigned”);
    
    • 1
    • 2

    4.通过数组产生容器,并指定初值的元素的范围

    int ia[8] = { 1,2,3,4,5,6,7,8 };
    vector<int> fib(ia, ia + 8);
    
    • 1
    • 2

    5.由某个容器产生出新容器

    复制原容器内的元素,作为新容器的初值:

    list<string> slist;//空容器
    //填充slist...
    list<string> slist2(slist);//将slist复制给slist2
    
    • 1
    • 2
    • 3

    四、容器末尾进行写入(插入)和弹出(删除)操作

    • push_back()和pop_back();
    • list和deque(不包括vector)还提供了push_front()和pop_front();
    • 读取最前端和最末端的元素应该使用front()和back().
    vec.push_back(1);//末端写入一个元素1
    vec.pop_back();//删除最后一个元素
    
    • 1
    • 2

    另:
    每个容器除了拥有通用的插入函数insert(),还支持其四种变形;除拥有通用的删除函数erase(),还支持其两种变形。(略)

  • 相关阅读:
    随笔感悟:Mysql悲观锁和乐观锁
    mysql存储过程 使用游标实现两张表数据同步数据
    传统机器学习笔记6——回归树模型
    Java.lang.Class类 getPackage()方法有什么功能呢?
    linux安装aerospike免安装版
    odoo16 档案管理中的视频档案的上传与播放
    性能测试和自动化测试有什么区别?
    AWS CodeDeploy
    小程序项目创建与Vant-UI引入
    部署Harbor镜像仓库
  • 原文地址:https://blog.csdn.net/weixin_49347928/article/details/132999238