• 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。

  • 相关阅读:
    MyBatis 的在使用上的注意事项及其辨析
    【网络工程】2、eNSP工具下载与安装
    【算法】Reverse Integer
    首届昇腾AI创新大赛,“照见”好学不倦的“后浪”
    区块链(8):p2p去中心化之websoket服务端实现业务逻辑
    Vue.js之组件插槽的使用
    Awake()、OnEnable()、Start()、Reset()、OnDisable()、OnDestroy()、OnValidate()
    Django与Ajax
    网络原理---拿捏应用层:HTTP协议
    2023大连工业大学计算机考研信息汇总
  • 原文地址:https://blog.csdn.net/sinat_33896833/article/details/127544085