• STL---规范


    1. "插入操作"

      新插入的数据位于‘哨兵迭代器“所指的节点的前方,并返回指向新插入位置的‘迭代器(指针)“。这是STL对于插入操作的标准规范。

    2.链表操作

      对于一个链式表,如果添加一个新的节点,双向链表修改的原则:“修新,改旧”,即先修改新创建到节点,使其“前向指针”接管position(哨兵)的前驱,后向指针指向哨兵本身;然后在修改原先链表结构,使哨兵的前驱的后继指针指向新的节点,哨兵的前驱指向新的节点。这样可以防止误操作先修改原来的表结构导致链表的逻辑关系丢失。

      这样处理,是遵循STL插入操作的规范。

      对于链表,新插入节点虽然破幻容器的长度,但是原来的迭代器仍然有效;二对于数组or vector,则不然,如果新插入节点导致了容器的长度变化,实质容器有重新申请空间以及数据迁移,所以对于数组类的容器,原来的迭代器将失效。固在遍历容器时,列表类是可以修改链表的结构的。

    3迭代器的指向

      begin(),指向容器的首个元素位置;

      end()指向尾部元素位置的后一个元素(空)位置,即指向"超尾"位置

      front(),首个元素;

      back(),末尾元素;

     4.对于STL的区间表示,永远是前闭后开的形式,即 [ a, b )

      表示,包含a元素但不包含b元素,即[a, b-1] 。所以对于区间操作的源代码中,首先一个就是对区间是否有效进行判定,即 if (first != last)

    5. 一般STL中的非直接对外公开的函数,一般以 “_ _” 大头;而对外公开的函数,则直接以函数原型开头,如 splice()

    6. List不能使用STL的sort()算法,必须使用自己的sort()成员函数,因为STL的sort()算法只接受RandomAcctessIterator类型的迭代器。

    7.deque是一段一段的定量连续空间构成,deque的最大任务是,辨识在这些分段定量连续空间上,维护器整体连续的假象。从而避开vector的’从新配置,复制,释放‘的轮回。所以,除非有必要,我们应尽可能选择vector,而非的确,对的确进行排序操作,为了最高的效率,常常先将deque复制到一个vector上,在vector上排序后,利用STLsort算法,然后在复制回deque。

  • 相关阅读:
    机器学习知识体系
    重新指派usb转串口模块在linux系统中的设备调用名称
    ROS 进阶学习笔记(13)
    121. 买卖股票的最佳时机
    SpringBoot | 集成Java Mail
    SpringBoot | 遇坑总结 | JPA
    测试 | 单元测试工具 | JUnit | 参数化
    测试 | 单元测试工具 | JUnit
    JSP | 基础 | 连接数据库
    Mysql | 总结 | 常用的查询语句(单表查询)
  • 原文地址:https://www.cnblogs.com/icmzn/p/4924331.html
Copyright © 2020-2023  润新知