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。
STL---规范的更多相关文章
- 【转】STL空间配置器
STL空间配置器(allocator)在所有容器内部默默工作,负责空间的配置和回收.STL标准为空间配置器定义了标准接口(可见<STL源码剖析>P43).而具体实现细节则由各编译器实现版本 ...
- STL Traits编程技法
traits编程技法大量运用于STL实现中.通过它在一定程度上弥补了C++不是强型别语言的遗憾,增强了C++关于型别认证方面的能力. traits编程技法是利用“内嵌型别”的编程技法和编译器的temp ...
- C++ STL的各种实现版本
ANSI/ISO的C++ STL规范版本正式通过以后,各个C++编译器厂商就可以依照标准所描述的原型去实现C++ STL泛型库,于是出现多种符合标准接口,但具体实现代码不同的泛型库,主要有: HP S ...
- 《STL源代码剖析》---stl_alloc.h阅读笔记
这一节是讲空间的配置与释放,但不涉及对象的构造和析构,仅仅是解说对象构造前空前的申请以及对象析构后空间怎么释放. SGI版本号的STL对空间的的申请和释放做了例如以下考虑: 1.向堆申请空间 2.考虑 ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- stl空间配置器简介
1. 符合STL标准的空间配器接口 STL是c++中使用非常广泛的一个标准库,它包含各种有用的容器.而空间配置器作为STL各种容器的背后的核心,负责容器内部内存的分配和释放.不过空间配置器可以分配的也 ...
- STL源代码剖析 容器 stl_list.h
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie list ----------------------------------------- ...
- STL源码剖析——序列式容器#3 Deque
Deque是一种双向开口的连续线性空间.所谓的双向开口,就是能在头尾两端分别做元素的插入和删除,而且是在常数的时间内完成.虽然Vector也可以在首端进行元素的插入和删除(利用insert和erase ...
- STL源码剖析——iterators与trait编程#3 iterator_category
最后一个迭代器的相应类型就是iterator_category,就是迭代器本身的类型,根据移动特性与实行的操作,迭代器被分为了五类: Input Iterator:这种迭代器所指的对象,不允许外界改变 ...
- 迭代器(iterator) 与 traits 编程技法
看了候哥的<STL源码剖析>的迭代器那一章,在这里将思路稍微疏理一下 迭代器 迭代器模式的定义:提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素. ...
随机推荐
- Excel 2003-单元格输入中带记忆功能
最近有个同事问我,如何在Excel单元格输入中带记忆功能?其实很简单: 工具ó选项ó编辑ó将“记忆式键入”项选中ó确定: //附图[效果图]:
- "\\s+"的使用
详解 "\\s+" 正则表达式中\s匹配任何空白字符,包括空格.制表符.换页符等等, 等价于[ \f\n\r\t\v] \f -> 匹配一个换页 \n -> 匹配一个换 ...
- centos7 opencc 安装
繁体字转换:http://xh.5156edu.com/jtof.php 转换的有问题http://tool.lu/zhconvert/ git网址:https://github.com/BYVoid ...
- afinal框架下 ViewInject的使用
1.可以在BaseActivity界面onCreate 方法setContentView后加上该语句. initInjectedView(this); 2.@ViewInject(id=R.id.v_ ...
- select 1 与 select null (转)
1.Select 1 在这里我主要讨论的有以下几个select 语句: table表是一个数据表,假设表的行数为10行,以下同. 1:select 1 from table 2:select cou ...
- c++ stl常用
#include<iostream>#include<string>#include<vector>#include<list>#include< ...
- 【校招面试 之 剑指offer】第16题 数值的整数次方
方法1:直接求解,但是要注意特殊情况的处理:即当指数为负,且底数为0的情况. #include<iostream> using namespace std; template<typ ...
- [leetcode]173. Binary Search Tree Iterator 二叉搜索树迭代器
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...
- Spring_AOP动态代理详解(转)
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- linux下静默安装 weblogic12.2.1.3中间件
第一步:准备需要的安装包文件,这里注意 weblogic12.2.*需要的最低JDK版本为1.8以上 1.查看当前的镜像列表:docker images 2.运行镜像,并进入容器,这里运行基本的cen ...