• 【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(),还支持其两种变形。(略)

  • 相关阅读:
    并查集及其应用
    【VASP】POSCAR文件
    源码分析:ThreadLocal如何实现线程本地化存储的?
    使用Python以UCI心脏病数据集为例,进行数据简单分析
    liunx Centos-7.5上 rabbitmq安装
    简述如何使用Androidstudio对文件进行保存和获取文件中的数据
    MySQl有哪些索引(种类)?索引特点?为什么要使用索引?
    网络编程_bind函数返回值
    springboot+火车票预订系统 毕业设计-附源码091029
    五、Vue3基础之五
  • 原文地址:https://blog.csdn.net/weixin_49347928/article/details/132999238