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。

STL---规范的更多相关文章

  1. 【转】STL空间配置器

    STL空间配置器(allocator)在所有容器内部默默工作,负责空间的配置和回收.STL标准为空间配置器定义了标准接口(可见<STL源码剖析>P43).而具体实现细节则由各编译器实现版本 ...

  2. STL Traits编程技法

    traits编程技法大量运用于STL实现中.通过它在一定程度上弥补了C++不是强型别语言的遗憾,增强了C++关于型别认证方面的能力. traits编程技法是利用“内嵌型别”的编程技法和编译器的temp ...

  3. C++ STL的各种实现版本

    ANSI/ISO的C++ STL规范版本正式通过以后,各个C++编译器厂商就可以依照标准所描述的原型去实现C++ STL泛型库,于是出现多种符合标准接口,但具体实现代码不同的泛型库,主要有: HP S ...

  4. 《STL源代码剖析》---stl_alloc.h阅读笔记

    这一节是讲空间的配置与释放,但不涉及对象的构造和析构,仅仅是解说对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本号的STL对空间的的申请和释放做了例如以下考虑: 1.向堆申请空间 2.考虑 ...

  5. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  6. stl空间配置器简介

    1. 符合STL标准的空间配器接口 STL是c++中使用非常广泛的一个标准库,它包含各种有用的容器.而空间配置器作为STL各种容器的背后的核心,负责容器内部内存的分配和释放.不过空间配置器可以分配的也 ...

  7. STL源代码剖析 容器 stl_list.h

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie list ----------------------------------------- ...

  8. STL源码剖析——序列式容器#3 Deque

    Deque是一种双向开口的连续线性空间.所谓的双向开口,就是能在头尾两端分别做元素的插入和删除,而且是在常数的时间内完成.虽然Vector也可以在首端进行元素的插入和删除(利用insert和erase ...

  9. STL源码剖析——iterators与trait编程#3 iterator_category

    最后一个迭代器的相应类型就是iterator_category,就是迭代器本身的类型,根据移动特性与实行的操作,迭代器被分为了五类: Input Iterator:这种迭代器所指的对象,不允许外界改变 ...

  10. 迭代器(iterator) 与 traits 编程技法

    看了候哥的<STL源码剖析>的迭代器那一章,在这里将思路稍微疏理一下 迭代器 迭代器模式的定义:提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素. ...

随机推荐

  1. Excel 2003-单元格输入中带记忆功能

    最近有个同事问我,如何在Excel单元格输入中带记忆功能?其实很简单: 工具ó选项ó编辑ó将“记忆式键入”项选中ó确定: //附图[效果图]:

  2. "\\s+"的使用

    详解 "\\s+" 正则表达式中\s匹配任何空白字符,包括空格.制表符.换页符等等, 等价于[ \f\n\r\t\v] \f -> 匹配一个换页 \n -> 匹配一个换 ...

  3. centos7 opencc 安装

    繁体字转换:http://xh.5156edu.com/jtof.php 转换的有问题http://tool.lu/zhconvert/ git网址:https://github.com/BYVoid ...

  4. afinal框架下 ViewInject的使用

    1.可以在BaseActivity界面onCreate 方法setContentView后加上该语句. initInjectedView(this); 2.@ViewInject(id=R.id.v_ ...

  5. select 1 与 select null (转)

    1.Select 1 在这里我主要讨论的有以下几个select 语句: table表是一个数据表,假设表的行数为10行,以下同. 1:select  1 from table 2:select cou ...

  6. c++ stl常用

    #include<iostream>#include<string>#include<vector>#include<list>#include< ...

  7. 【校招面试 之 剑指offer】第16题 数值的整数次方

    方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typ ...

  8. [leetcode]173. Binary Search Tree Iterator 二叉搜索树迭代器

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  9. Spring_AOP动态代理详解(转)

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

  10. linux下静默安装 weblogic12.2.1.3中间件

    第一步:准备需要的安装包文件,这里注意 weblogic12.2.*需要的最低JDK版本为1.8以上 1.查看当前的镜像列表:docker images 2.运行镜像,并进入容器,这里运行基本的cen ...