• 【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知识体系】第1章 初识 MySQL
    JavaScript —— 算法思想之栈数据结构
    【Hello Go】Go语言面向对象
    非空校验的几种方式
    宝刀未老!阿里P8老兵耗时三年总结出这份Java项目实战文档
    企业管理系统有哪些?
    来自北大算法课的Leetcode题解:5. 最长回文子串
    Pyinstaller编译python项目为exe遇到的问题,flask服务无法启动
    【VUE项目实战】62、项目优化上线准备+生成项目报告
    真无线耳机哪个好?真无线耳机性价比排行榜
  • 原文地址:https://blog.csdn.net/weixin_49347928/article/details/132999238