• c++之顺序容器


    顺序容器

    顺序容器提供快速顺序访问元素的能力。
    vector可变数组大小,支持快速访问,在尾部之外的位置插入删除较慢
    deque双端队列,支持快速随机访问,头尾插入删除元素很快
    list双向链表,只支持双向顺序访问,在list中任何位置插入删除都很快
    forward_list单向链表,只支持单向顺序访问,在链表任何位置插入删除都很快
    array固定大小数组,支持快速随机访问,不能添加删除元素
    string与vector类似,保存字符。
    string和vector将元素保存在连续的内存空间中,由于元素连续存储,由元素下标计算地址非常快速。
    forward_list和array是新C++标准增加的类型,与内置数组相比,array是一种更安全更容易使用的数组类型。与内置数组类似,array对象的大小固定,不支持添加和删除元素及改变容器大小的操作。
    通常,使用vector是最好的选择。

    容器库

    迭代器

    forward_list迭代器不支持递减运算符(–)。
    迭代器范围是标准库的基础
    begin和end分别指向第一个元素和最后一个元素之后的位置。
    元素范围被称为左闭合区间[begin,end)
    如果begin与end相等,范围为空,如果不等,则至少包含一个元素
    只有顺序容器的构造函数才接受大小参数,关联容器并不支持。
    不能对内置数组类型进行拷贝或对象赋值,但array并没有此限制。

    顺序容器操作

    添加元素

    forward_list有专门的insert和emplace,不支持push_back和emplace_back。
    vector和string不支持push_front和emplace_front。
    向vector,string,deque插入元素会使指向容器的迭代器,引用和指针失效。
    顺序容器访问元素的操作
    c.back()返回尾元素的引用,c为空的话函数行为未定义
    c.front()返回首元素的引用,c为空的话函数行为未定义
    c[n]
    c.at(n)
    访问成员函数返回的是引用。可以用来改变元素的值。

    vector对象如何增长

    额外的string操作

    从const char*创建string时,指针指向的数组必须以空字符结尾,拷贝操作遇到空字符停止。

    substr

    s.substr(pos,n)返回string,包含s中从pos开始的n个字符的拷贝

    容器适配器

    stack,queue,priority_queue

    定义适配器

    每个适配器定义两个构造函数:默认构造函数构建一个空对象,接受一个容器的构造函数拷贝该容器来初始化适配器。
    stack和queue是基于deque实现的,priority_queue是在vector上实现的。
    queue适配器可以构造于list和deque之上,但不能基于vector构造。

    stack

    每个容器适配器都基于底层容器类型的操作定义了自己的特殊操作,只能用适配器操作,不能使用底层容器类型操作。stack只能用push,而不能用deque的push_back。

  • 相关阅读:
    硬之城携手阿里云 Serverless 应用引擎(SAE)打造低代码平台
    Linux 查看CPU架构及内核版本
    704.二分查找
    SIFT和SURF的差异已经使用场景分析
    图的创建(邻接表,邻接矩阵)(浙大数据结构代码)
    AcWing 5180. 正方形泳池
    JSON.stringify() / JSON.parse() / JSON 真是个好东西
    【解决问题】跨域 图片跨域问题 has been blocked by CORS policy No-Access-Control-Allow-Origin
    Unity --- 网格链接与动态障碍物
    C语言实现malloc与free函数完成内存管理
  • 原文地址:https://blog.csdn.net/sinat_33896833/article/details/127544085