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源码剖析>的迭代器那一章,在这里将思路稍微疏理一下 迭代器 迭代器模式的定义:提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素. ...
随机推荐
- java public project default private
- sessionpage1
session1 <%@page import="java.text.SimpleDateFormat"%> <%@ page language="ja ...
- linux下的计算器
(1)bc bc在默认的情况下是个交互式的指令.在bc工作环境下,可以使用以下计算符号:+ 加法 - 减法 * 乘法 / 除法 ^ 指数 % 余数如: 3+4;5*2;5^2;18/4 &l ...
- Web标准:三、二列和三列布局
知识点: 1.二列自适应宽度 2.二列固定宽度 3.二列固定宽度居中 4.xhtml的块级元素(div)和内联元素(span) 5.float属性 6.三列自适应宽度 7.三列固定宽度 8.三列固定宽 ...
- js strict 关键字
strict strict模式,JavaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量.这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动 ...
- linux下一些常用系统命令
查看系统打开的文件数 lsof|wc -l 查看当前目录下的文件数 find -type f | wc -l 查看某个目录下的文件数,注意这里/home包括其所有子目录 find /home -typ ...
- java文件读写操作指定编码格式
读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,R ...
- pip安装python模块方法
网上搜索了很多,主流的配置方法分为两种: 摘自 1.http://www.jb51.net/article/83617.htm 安装pip的包并确定pip安装时的镜像源地址,国内常用的地址有: htt ...
- 社交类APP原型模板分享——微信
微信是一款社交类的APP应用——聊天软件,支持多人群聊. 交互效果主要有滚动内容界面.选择组件触发按钮状态变化.点击下拉展开列表.点击弹出面板等交互操作. 本原型由国产原型工具-Mockplus制作完 ...
- Eclipse 中 Could not find *.apk的解决方案
Eclipse 中 Could not find *.apk的解决方案 有时候debug的时候出现Could not find *.apk 特别是导入别人的例子的时候 1.选择properties-& ...