ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:23.45KB ,
资源ID:6046121      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6046121.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(学习笔记标准模板库STL.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

学习笔记标准模板库STL.docx

1、学习笔记标准模板库STLWord文档章节编号样式模版一董国雄年月目录第 1 章 C+中的STL简介 2第 2 章 C+中的vector使用范例 62.1 概述 62.2 其它功能 72.3 迭代器 82.4 综合示例 8第 3 章 样式名称及使用 133.1 样式名称 133.1.1 标题名称 133.1.1.1 一级标题 133.1.1.2 二级标题 133.1.1.3 三级标题 133.1.1.4 四级标题 133.1.2 正文名称 133.1.3 页眉页脚 133.2 页面设置 143.3 样式创建 143.4 样式使用 143.4.1 文档模版 143.4.2 文档目录 14第 4 章

2、 Word使用的几个问题 154.1 修订和审阅 154.2 样式创建与保护 154.2.1 样式创建和修改 154.2.2 样式保护 154.3 无用样式删除 15第 1 章 C+中的STL简介一、STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C+中,但在被引入C+之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、container

3、(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C+标准中,STL被组织为下面的13个头文件:、和。以下笔者就简单介绍一下STL各个部分的主要特点。二、算法 大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。而C+通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架

4、中完成这些算法的你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。算法部分主要由头文件,和组成。是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较

5、、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。中则定义了一些模板类,用以声明函数对象。三、容器 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通

6、过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。容器部分主要由头文件,和组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。数据结构描述实现头文件向量(vector)连续存储的元素列表(list)由节点组成的双向链表,每个结点包含着一个元素双队列(deque)连续存储的指向不同元素的指针所组成的数组集合(set)由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序多重集

7、合(multiset)允许存在两个次序相等的元素的集合栈(stack)后进先出的值的排列队列(queue)先进先出的值的排列优先队列(priority_queue)元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列映射(map)由键,值对组成的集合,以某种作用于键对上的谓词排列多重映射(multimap)允许键对有相等的次序的映射四、迭代器 下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些(至少笔者是这样)。软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联

8、系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。迭代器部分主要由头文件,和组成。是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,中提供了迭代器使用的许多方法,而对于的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。五、对初学者学习STL的一点建议 对于之前不太了解STL的读者来说,上面的文字只是十分概括地描述了一下STL的框架,对您理解S

9、TL的机制乃至使用STL所起到的帮助微乎甚微,这不光是因为深入STL需要对C+的高级应用有比较全面的了解,更因为STL的三个部分算法、容器和迭代器三部分是互相牵制或者说是紧密结合的。从概念上讲最基础的部分是迭代器,可是直接学习迭代器会遇到许多抽象枯燥和繁琐的细节,然而不真正理解迭代器又是无法直接进入另两部分的学习的(至少对剖析源码来说是这样)。可以说,适应STL处理问题的方法是需要花费一定的时间的,但是以此为代价,STL取得了一种十分可贵的独立性,它通过迭代器能在尽可能少地知道某种数据结构的情况下完成对这一结构的运算,所以下决心钻研STL的朋友们千万不要被一时的困难击倒。其实STL运用的模式相

10、对统一,只要适应了它,从一个STL工具到另一个工具,都不会有什么大的变化。对于STL的使用,也普遍存在着两种观点。第一种认为STL的最大作用在于充当经典的数据结构和算法教材,因为它的源代码涉及了许多具体实现方面的问题。第二种则认为STL的初衷乃是为了简化设计,避免重复劳动,提高编程效率,因此应该是“应用至上”的,对于源代码则不必深究。笔者则认为分析源代码和应用并不矛盾,通过分析源代码也能提高我们对其应用的理解,当然根据具体的目的也可以有不同的侧重。最后要说的是,STL是ANSI/ISO C+标准的一部分,所以对于一个可以有多种C+实现的过程,首先考虑的应该是STL提供的模板(高效且可移植性好)

11、,其次才是各个厂商各自相应的库(高效但可移植性不好)以及自己去编写代码(可移植性好但低效)。第 2 章 C+中的vector使用范例2.1 概述vector是C+标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小。例如:/ c语言风格int myHouse100 ;/ 采用vectorvector vecMyHouse(100);当如上定义后,vecMyHouse就可以存放100个int型的数据了。1. 它可以像普通数组一样访问vecMy

12、House50 = 1024;2. 你可以顺序地向容器中填充数据int i =0 ;for( ;i 25; i+ ) vecMyHouse.push_back(1);3. 它还可以动态地改变它的大小,通过下面这条语句实现/ 将容器的大小改为400,这样容器中就可以容纳400个int型数据了vecMyHouse.resize(400);4. 你也可以在容器中装入自定义的数据类型/ 自定义一个classclass Cmyclass ;/ 定义一个存放class的容器vector vecMyHouse;5. 你可以在定义容器时为它赋初值/ 定义一个容纳100个int型数据的容器,初值赋为0vecto

13、r vecMyHouse(100,0);6. 你可以把一个容器的对象赋值给另外一个容器/ 定义一个容纳100个int型数据的容器,初值赋为0vector vecMyHouse(100,0);/定义一个新的容器,内容与上述容器一样vector myVec ;myVec = vecMyHouse;2.2 其它功能1. 为了使用vector,必须在你的头文件中包含下面的代码:#include 2. vector属于std命名域的,因此需要通过命名限定,可以在文件开头加上using std:vector;或者using namespace std;或者直接在使用vector的代码前加前缀std:vec

14、tor myHouse;3. vector提供如下函数或操作(部分常用的功能):/ 定义一个vectorvector c;c.clear() 移除容器中所有数据。c.empty() 判断容器是否为空。c.erase(pos)删除pos位置的数据c.erase(beg, end) 删除beg,end)区间的数据c.front() 传回第一个数据。c.insert(pos, elem)在pos位置插入一个elem拷贝c.pop_back() 删除最后一个数据。c.push_back(elem) 在尾部加入一个数据。c.resize(num) 重新设置该容器的大小c.size() 回容器中实际数据的

15、个数。c.begin()返回指向容器第一个元素的迭代器c.end()返回指向容器最后一个元素的迭代器2.3 迭代器迭代器相当于指针,例如:对于变量而言,使用指针指向对应的变量,以后就可以使用 * 加指针来操作该变量了。对于容器,使用迭代器操作容器中对应位置的值,当迭代器指向了容器中的某位置,则可以使用 * 加迭代器操作该位置了。vector myVec; / 定义一个vectorfor(int j =0 ; j10 ; j+) myVec.push_back(j); /添加10个元素/ 定义一个迭代器vector:iterator p;p = myVec.begin(); / 指向容器的首个元

16、素p +; / 移动到下一个元素*p = 20 ;/修改该元素赋值,myVec容器中的第二个值被修改为了20/ 循环扫描迭代器,改变所有的值for(p = myVec.begin() ; p!= myVec.end(); p+ ) *p = 50; 以上简单讲述了vector的用法,仅供入门之用,谢谢。2.4 综合示例1.vector 的数据的存入和输出:#include#include#include using namespace std;void main()int i = 0;vector v;for( i = 0; i 10; i+ )v.push_back( i );/把元素一个一

17、个存入到vector中对存入的数据清空for( i = 0; i v.size(); i+ )/v.size() 表示vector存入元素的个数cout v i ; /把每个元素显示出来cont endl;注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。你也可以这样做:vector:iterator iter;for( iter = v.begin(); iter != v.end(); iter+ )cout *iter endl;2. 对于二维vector的定义。1)定义一个10个vector元素,并对每个vector符值1-10。#i

18、nclude#include#include using namespace std;void main()int i = 0, j = 0;/定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。所以每一行的长度是可以变化的。之所以用到vector(0)是对vector初始化,否则不能对vector存入元素。vector vector Array( 10, vector(0) );for( j = 0; j 10; j+ )for ( i = 0; i 9; i+ )Array j .push_back( i );for( j = 0; j 10; j+ )for

19、( i = 0; i Array j .size(); i+ )cout Array j i ;cout endl;2)定义一个行列都是变化的数组。#include#include#include using namespace std;void main()int i = 0, j = 0;vector vector Array;vector line;for( j = 0; j 10; j+ )Array.push_back( line );/要对每一个vector初始化,否则不能存入元素。for ( i = 0; i 9; i+ )Array j .push_back( i );for(

20、 j = 0; j 10; j+ )for( i = 0; i Array j .size(); i+ )cout Array j i ;cout endl;使用 vector erase 指定元素#include iostream#include vectorusing namespace std;intmain()vectorarr;arr.push_back(6);arr.push_back(8);arr.push_back(3);arr.push_back(8);for(vector:iterator it=arr.begin(); it!=arr.end(); )if(* it =

21、8)it = arr.erase(it);else+it;cout After remove 8:n;for(vector:iterator it = arr.begin(); it arr.end(); +it)cout * it ;cout endl;第 3 章 样式名称及使用由于文档之间的拷贝和粘贴,重名样式可能被覆盖,样式名可能被修改,造成排版困难。因此,构造一套自己的样式名,以便保持格式。同时,目录中还可以包含内置的标题和大纲级别,使目录的生成更加灵活。3.1 样式名称3.1.1 标题名称3.1.1.1 一级标题“D标题1”。大纲级别1,自动编目为第x章,段前换页,居中,宋体二号,粗

22、体。基于“正文”,无基于样式,后续段落“D正文”。3.1.1.2 二级标题“D标题2”。大纲级别2,自动编目为x.x,左对齐,宋体三号,粗体。基于“正文”,无基于样式,后续段落“D正文”。3.1.1.3 三级标题“D标题3”。大纲级别3,自动编目为x.x.x,左对齐,宋体四号,粗体。基于“正文”,无基于样式,后续段落“D正文”。3.1.1.4 四级标题“D标题4”。大纲级别4,自动编目为x.x.x.x,左对齐,宋体小四号,粗体首行缩进2字符。无基于样式,后续段落“D正文”。3.1.2 正文名称“D正文”。宋体小四,首行缩进2字符,1.5倍行距。无基于样式,后续段落“D正文”。3.1.3 页眉页

23、脚“D页眉”、“D页脚”,宋体小五,下边框、上边框,居中。3.2 页面设置Top=3厘米,Bottom=2.54厘米,Left=Right=2.54厘米。页眉边距=2厘米,页脚边距=1.75厘米,首页页眉页脚与其它页不同。3.3 样式创建从空白文档开始,特别注意的是自动编目设置,一定要在同一编目体系下进行,可先命名设置好字体、段落、前后间空,再一次性自定义编目。编目与标题之间用空格而不是制表符分割,使得编目较长时不会有问题。3.4 样式使用3.4.1 文档模版将此文档作为模版,用格式名称或格式刷应用样式。3.4.2 文档目录目录中设置了显示4级大纲。分别是“D标题1”、“D标题2”、“D标题3

24、”、“D标题4”。第 4 章 Word使用的几个问题4.1 修订和审阅选中“工具修订”,则所有更改的前后状态都被保存。凡在“修订”模式下进行过更改的文档,可以用“工具自定义审阅”激活审阅工具栏,在其上选择显示状态,接受或拒绝单个修订或所有修订。修订历史纪录不但使文档较大,也可能会引起文档内部问题,最终文档版本最好用上述法消除修订历史。4.2 样式创建与保护4.2.1 样式创建和修改创建样式可从“工具样式和格式”或从“格式工具栏”上的快捷按钮进入。在样式中最好不要选中“添加到模版”和“自动更新”。添加到模版(Normal.dot)将影响到以后文档的创建。自建样式最好不要基于已有样式,应为基于样式的改变会引发倚赖其的样式改变。慎用“样式和格式”任务栏中的“更新以匹配选择”,它会用当前选中的段落的格式替换进行操作的样式,造成样式的破坏。4.2.2 样式保护进入“工具文档保护”可以强制设置样式、文档保护,启用禁用保护需要密码,此保护在对文档进行大修改时,不宜使用。已可以在“格式工具栏”点击进入。4.3 无用样式删除在“格式工具栏”点击选择“XML结构模版和加载项模版管理器”,在其中可以删除无用的样式。当从其它文档复制粘贴内容后,可能会引起原文档中的样式名的改变,删除部分冗余的样式,可以提高文档的可用性。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1