第11章 标准模板库
C “准”标准库BOOST简介
C++“准”标准库Boost简介标准C++的当前版本发布于1998,它为传统的面向过程编程、面向对象编程和泛型编程提供了坚实的支持。
正如旧C++(1998之前的)独力承担了把面向对象普及到日常的软件开发中一样,C++98在为泛型编程做着同样的事情。
九十年代中期标准模板库(STL)与标准C++的集成已经引起了另一次编程范式的转变,就象八十年代的时候Bjarne Stroustrup把类引入到C一样。
现在大多数的C++开发者都熟悉STL的概念,这再次提升了整体的水平。
C++能力的应用仍旧被不断发现。
今天许多的C++库,包括特殊的数学库,都大量利用了模板元编译的技术,它是设计C++模板的时候没有预测到的幸运结果。
随着C++社区里的高级工具和技术不断涌现,开发复杂应用软件正变得更简单、更令人愉快。
很难描述Boost对于C++世界的重要性。
自从C++98发布后,除了ISO的标准C++委员会,没有一个团体对于C++的发展方向有比Boost更大的影响(许多Boost的成员本身就是WG21的重要成员,包括它的创始人,我的朋友Beman Dawes)。
成千上万个杰出的Boost志愿者无私地,以对等审查方式开发了许多C++98没有提供的很有用的库。
这些库中的十个已被接受将加入到即将到来的C++0x的库中,更多的库正被考虑接受。
Where a library approach has been shown to be wanting,the wisdom gained from the cross-pollination of Boost and WG21 has suggested a few modest language enhancements,which are now being entertained.你不太可能没有听说过Boost,我来问一下你…你需要在文本和数字之间进行转换,或在任意的可流处理的类之间进行转换?没有问题,用Boost.lexical_cast。
信息学奥赛NOIP标准模板库入门ppt课件
STL入门
1
STL
Standard Template Library(标准模板库),惠普实验室 开发的一系列软件的统称。
22
vector之reverse应用——序列翻转
【输出要求】 一行N个整数,表示操作后的数组。 【输入样例】 52 12345 24 45
【输出样例】 14352
23
在Vector中删除某关键字的元素
Remove移动指定区间中的元素直到所有“不删除的”元素在区 间的开头(相对位置和原来它们的一样)。它返回一个指向最后 一个的下一个“不删除的”元素的迭代器。 所以,我们用前面讲到的Erase即可删除某关键字的元素
16
vector应用——链表操作
接下来M行,每行第一个数OPT,表示操作类型。 对于操作1,接下来两个数X,Y,含义见题面描述,保证0≤X≤当 前数的个数,若X=0,表示在数组开头插入。 对于操作2,接下来一个数X,含义见题面描述,保证1≤X≤当前 数的个数。 【输出要求】 输出若干个数,表示最后的数组。
17
vector应用——链表操作
【输入样例】
53
12345
116
21
22
【输出样例】
6345
18
AlgorithБайду номын сангаас库函数在Vector的应用
• Sort(x, y)对于区间[x,y)实现了排序。同样,它也可以用于 Vector。
STL标注模板库.ppt
c.erase(beg,end)
移除[beg,end]区间内所有元素,某些容器会 返回未被移除的第 一个接续元素
c.insert(pos,elem)
将elem的一份副本安插于pos处,返回值和pos的意义并不相同
c.begin()返回一个迭代器,指向第一元素 c.end()返回一个迭代器,指向最后元素下一个位置 c.rbegin() 返回一个逆向迭代器,指向逆向遍历时第一元素 c.rend()返回一个逆向迭代器,指向逆向遍历时最后元素的 下
•
copy(arr2,arr2+6,ostream_iterator<int>(cout, " "));
• return 0;
•}
• 非变序型队列算法
• #include <iostream>
• #include <vector>
• #include <algorithm>
• using namespace std;
• Vector头文件:#include<vector>
vecotr
• Vector是一个类,有自己的构造函数,在 vector类中定义了4种构造函数,分别如下 操作:
Vector<int>a; Vector<int>b(5,0); Vector<int>c(b); Vector<int>d(m,m+5); 具体例子如下所示
• int main(void)
• { int a[10]={12,0,5,3,6,8,9,34,32,18};
• int b[5]={5,3,6,8,9};
• int d[15];
第11章(44)教材配套课件
第11章 文本分类
(1) 文本。 本书泛指一般的文本或者文本中的段落、 句 群或者句子, 通常指的是一篇文章。 尽管文本可以是多媒体 对象, 但是在本书的讨论中, 只认为是文本对象。
(2) 特征项。 文本的内容由一些特征项来表达, 一般由文 本所含有的基本语言单位(字、 词、 词组或短语等)来表示, 即文本可以表示为D(t1, t2, …, tn), 其中, tk表示各个特征项, 每 个特征项表示文本的一个维度。
第11章 文本分类
(5) 相似度度量。 两个文本D1和D2之间的相关程度常常 Sim(D1, D2)来度量。
在向量空间模型下, 可以借助向量之间的某种距离来表示 文本间的相似度。 常用的是采用向量之间的内积来计算相似 度, 定义式如下:
n
Sim(D1, D2 ) w1k w2k k 1
(11-2)
第11章 文本分类
文本分类中, 通常使用的特征评估函数有信息增益 (Information Gain)、 期望交叉熵(Expected Cross Entropy)、 文档频率(Document Frequency)、 文本证据权(the Weight of Evidence for Text)、 开方拟合检验(χ2-statistic)、 优势率 (Odd Ratio)、 互信息(Mutual Information)等。 每一种特征 选择方法对应一种特征评估函数。
第11章 文本分类 wik tfik idfk
(11-4)
式中: tfik是一个局部统计量, 它在不同文本中有不同的值; 反 向文档频率idfk是一个全局统计量, 反映了一个给定的词条在整 个文档集中的分布情况。IDF
N
idfk
log
标准模板库的earse()
标准模板库的earse()1 摘要本文首先介绍了STL基本容器的一些概念和实际应用,然后着重分析了下vector、list的earse()使用方式及注意事项。
2 STL容器简介标准模板库(STL)是一个容器类模板库和算法库。
STL支持多中容器类型,这些容器的类型分为序列式容器(sequence container)和结合式容器(associative container)。
这些容器都有许多相似的地方,但每个容器也都有自己的特点。
首先分析一下vector、deque、list之间的相似与不同之处。
对于vector,可以看成一个动态的数组,可以通过迭代器随机的存取,当往其插入新的元素时,如果在结尾插入,将会执行效率比较高,而如果往中间的某个位置插入,其插入位置之后的元素都要后移,因此效率就不是那么的高。
对于deque它和vector 特别的相似;它的元素也存在于动态数祖中,也支持随机存取,和vector有几乎一样的接口。
最大的不同之处就是,deque是双向的。
与vector相比(1)在首和尾插入和移动元素都特别的快;(2)对于元素的存取和迭代器的移动相对vector来说比较慢(这是由于deque内部的结构导致);(3)deque中的迭代器(iterators)类似智能指针,而不同于普通的指针;(4)因为可能用到了不止一块内存( one block of memory),max_size()将比vector的max_size()大;(5)不支持reallocation;(6)支持内存缩小,当某些内存块不用时,将得到释放。
在接口的实现上与vector几乎一样,只是少了capacity()与reserve()(原因上面已提到)而多了两个push_front()、pop_front()(因为deque是双向的)。
对于list可以将它的元素看成是方向链表。
它和vector、deque有很大的不同。
主要如下(1)它不能随机存取,必须从头一个一个遍历;(2)插入和删除任意位置都比较快,因为仅仅是操作指针;(3)插入和删除不会导致它的指针、引用、迭代器无效;(4)不能利用下表算符[]或者at()来存取元素(同(1));(5)不支持capacity 或者重新分配,因为每个元素有自己的内存;(6)list自己提供了一些成员函数来支持元素的移动等,这些成员方法比<algorithm>中的同名方法有更高的效率。
C++程序设计--标准模板库STL介绍及应用(第7章)
拷贝构造函数 将容器初始化为现有同类容器副本的构造函数
析构函数 不再需要容器时进行内存整理的析构函数
empty() 容器中没有元素时返回true,否则返回false
max_size() 返回容器中最大元素个数
size() 返回容器中当前元素个数
operator= 将一个容器赋给另一个容器
备注
2020/8/4
STL对C++的影响
在STL之前,C++支持三种基本的编程样式—面向过程 编程、数据抽象和面向对象编程。
在STL出现之后,C++可以支持一种新的编程模式—泛 型程序设计。
STL并不完美,但是,它开辟了程序设计的新天地,它 拥有的影响力甚至于超过了巨大的C++群体。
2020/8/4
8
C/C++程序设计教程--面向对象分册
有两个版本返回reverse_iterator或 const_reverse
_ iterator,引用容器第一个元素前面一位
erase(p, q) erase(p)
从容器中清除一个或几个元素
clear() 清除容器中所有元素
2020/8/4
备注 不适用于 容器适配器
不适用于 容器适配器
不适用于 容器适配器
描述
后进先出的值的排列。
先进先出的值的排列。 元素的次序是由作用于所存储的值对 上的某种谓词决定的一种队列。 由{键,值}对组成的集合,以某种作 用于键对上的谓词排列。 允许键对有相等的次序的映射。
类型 头文件
容器适 配器
<stack>
容器适 <queue
配器
>
标准模板库STL中list和vect和stack和queue存储工人对象
cout<<"v1(back()与pop_back()输出):\n";
while(!v1.empty()){
v1.back().display();
v1.pop_back();
}
cout<<"v2(迭代器输出):\n";
for(iter=v2.begin();iter!=v2.end();iter++){
class Worker{
public:
Worker(char * name="",int age=20,double salary=3000);
Worker(const Worker &);
char * getName();
void setData(char * name="",int age=20,double salary=3000);
// L1.push_front(L2.front());
// L2.pop_front();
L1.push_front(L2.back()); //把链表L2从队尾开始依次合并到链表L1中
L2.pop_back();
}
}
void testList(){ //标准模板库链表list容器存储Worker类对象示例
w1[1].setData("左冷禅",53,5700);
w1[2].setData("李亚鹏",28,55800);
w2[0].setData("华北科技学院",28,3500);
w2[1].setData("令狐冲",42,3900);
C++第11章习题解答
第十一章标准模板库(STL)习题一. 基本概念与基础知识自测题11.1填空题11.1.1 STL大量使用继承和虚函数是(1)(填对或错)。
因为(2)。
答案:(1)错(2)它使用的是模板技术,追求的是运行的效率,避免了虚函数的开销11.1.2 有两种STL容器:(1)和(2)。
STL不用new和delete,而用(3)实现各种控制内存分配和释放的方法。
答案:(1)第一类容器(2)近容器(3)分配子(allocator)11.1.3 五种主要迭代子类型为(1)、(2)、(3)、(4)和(5)。
STL算法用(6)间接操作容器元素。
sort算法要求用(7)迭代子。
答案:(1)输入(InputIterator)(2)输出(OutputIterator)(3)正向(ForwardIterator)(4)双向(BidirectionalIterator)(5)随机访问(RandomAccessIterator)(6)迭代子(7)随机访问(RandomAccessIterator)11.1.4 三种STL容器适配器是(1)、(2)和(3)。
答案:(1)stack(栈)(2)queue(队列)(3)priority_queue(优先级队列)11.1.5 成员函数end()得到容器(1)的位置,而rend得到容器(2)的位置。
算法通常返回(3)。
答案:(1)最后一个元素的后继位置(2)引用容器第一个元素的前导位置。
实际上这是该容器前后反转之后的end()(3)迭代子11.1.6 适配器是(1),它依附于一个(2)容器上,它没有自己的(3)函数和(4)函数,而借用其实现类的对应函数。
答案:(1)不独立的(2)顺序(3)构造函数(4)析构函数11.1.7 返回布尔值的函数对象称为(1),默认的是(2)操作符。
答案:(1)谓词(predicate)(2)小于比较操作符“<”11.1.8C++标准库中给出的泛型算法包括(1)种算法。
标准模板库
标准模板库标准模板库,也叫STL,是一个 C++ 容器类库,算法和迭代器。
他提供许多基本算法,数据结构。
STL 是一个通用库,即可以充份定制:几乎所有的 STL 组件都是模板。
在你使用 STL 前,你必须了解模板的工作情况。
容器和算法和许多类库一样,STL 包含容器类 - 可以包含其他对象的类。
STL 包含向量类,链表类,双向队列类,集合类,图类,等等。
他们中的每个类都是模板,能包含各种类型的对象。
例如,你可以用 vector<int> ,就象常规的 C 语言中的数组,除了 vector 不要你象数组那样考虑到动态内存分配的问题。
vector<int> v(3); // 定义一个有三个元素的向量类v[0] = 7;v[1] = v[0] + 3;v[2] = v[0] + v[1]; // v[0] == 7, v[1] == 10, v[2] == 17STL 还包含了大量的算法。
他们巧妙地处理储存在容器中的数据。
你能够颠倒vector 中的元素,只是简单使用 reverse 算法。
reverse(v.begin(), v.end()); // v[0] == 17, v[1] == 10, v[2] == 7在调用 reverse 的时候有两点要注意。
首先,他是个全局函数,而不是成员函数。
其次,他有两个参数,而不是一个:他操作一定范围的元素而不是操作容器。
在这个例子中他正好是对整个容器 V 操作。
以上两点的原因是相同的:reverse 和其他 STL 算法一样,他们是通用的,也就是说, reverse 不仅可以用来颠倒向量的元素,也可以颠倒链表中元素的顺序。
甚至可以对数组操作。
下面的程序是合法的。
double A[6] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7 };reverse(A, A + 6);for (int i = 0; i < 6; ++i)cout << "A[" << i << "] = " << A[i];这个例子也用到了范围,和我们上面的向量的例子一样:第一个参数是指向要操作的范围的头的指针,第二个参数是指向尾的指针。
A11-模板工程
A.11 模板工程
2.3 液压滑升钢模板施工 液压滑升钢模板施工的烟筒、水塔塔身、贮仓等,均按混 凝土体积,以立方米计算。 2.4 倒圆锥形水塔 倒圆锥形水塔罐壳模板按混凝土体积以立方米计算。倒圆 锥形水塔罐壳组装、提升、就位,按不同容积以座计算。 3.预制混凝土构件模板工程量,按以下规定计算: 预制混凝土构件模板工程量,按以下规定计算: 3.1 预制混凝土 预制混凝土模板工程量,除另有规定外均按混凝土实体体 积以立方米计算。 3.2 小型池槽 小型池槽按外型体积以立方米计算。 3.3 预制混凝土桩尖 预制混凝土桩尖按虚体积(不扣除桩尖虚体积部分)计算。
A.11 模板工程
1.12 屋顶水池 屋顶水池,分别按柱、梁、墙、板项目计算。 1.13 楼梯包括 楼梯包括休息平台、梁、斜梁及楼梯与楼板的连接梁, 按设计图示尺寸以水平投影面积计算,不扣除宽度小于 500mm的楼梯井所占面积,楼梯的踏步板、平台梁等侧面 侧面模 侧面 板不另计算。 1.14 混凝土压顶、扶手 压顶、 压顶 扶手按延长米计算。 1.15 小型池槽 小型池槽模板按构件外围体积计算,池槽内、外侧及底部 的模板不另计算。 1.16 台阶 台阶模板按水平投影面积计算,台阶两侧不另计算模板面 积。 1.17 现浇混凝土散水 散水按散水坡设计图示面积以平方米计算,现 散水 浇混凝土明沟 明沟按延长米计算。 明沟
A.11 模板工程
1.7.3 计算墙模板时,不扣除梁与墙交接处 不扣除梁与墙交接处的模板面积。 不扣除梁与墙交接处 1.7.4 计算板模板时,不扣除柱、墙所占的面积。 不扣除柱、 不扣除柱 1.8 梁、板、墙模板均不扣除后浇带 均不扣除后浇带所占的面积。 均不扣除后浇带 1.9 现浇悬挑板 现浇悬挑板按外挑部分的水平投影面积计算,伸出墙外的 牛腿、挑梁及板边的模板不另计算。 1.10 薄壳板 薄壳板由平层和拱层两部分组成,按平层水平投影面积计 算工程量。 1.11 板式转换层楼板模板按楼板垂直投影面积以平方米计算, 板式转换层楼板 侧面面积不增加,不扣除柱、墙接触面所占面积;楼层顶撑 按转换层楼板模板乘以实际支撑层数计算。
第11章 (10)教师用书配套课件
11.5 留言板
Liuyan.php页面为留言板列表页面,在该页面可以看到 所有用户的留言以及管理员的回复。该页面左侧为留言用 户头像和昵称,右侧为留言和管理员回复。
第14页
11.5.1 用户留言
Liuyan.php页面为留言板列表页面,在该页面可以看到 所有用户的留言以及管理员的回复。该页面左侧为留言用 户头像和昵称,右侧为留言和管理员回复。
第11页
11.4.2房屋租赁信息发布
用户如果需要发布房屋租赁信息,可以打开信息发布页面 fabufangyuan.html。在该页面,填写包括小区、面积、 租金等在内的房源信息,以便其他用户了解房屋信息。
第12页
主要内容
11.1 需求分析 11.2 数据库设计 11.3 主页 11.4 房屋租赁 11.5 留言板 11.6 用户注册 11.7 本章小结
第15页
11.5.2 管理员回复留言
管理员登陆后,点击咨询管理,调用bbs_admin.php页 面,查看用户留言。
第16页
主要内容
11.1 需求分析 11.2 数据库设计 11.3 主页 11.4 房屋租赁 11.5 留言板 11.6 用户注册 11.7 本章小结
第17页
11.6 用户注册
房屋租赁系统是管理房屋出租、出售信息资料而设计的信 息管理系统,包含有后台数据库和前台应用程序系统两大 部分,后台数据库要求数据的一致性和完整性、安全性, 用以储存文档资料及相关信息,前台应用程序系统要求应 用程序功能完备、易于求分析 11.2 数据库设计 11.3 主页 11.4 房屋租赁 11.5 留言板 11.6 用户注册 11.7 本章小结
第6页
11.2 数据库设计
标准的编写新版GBT11课件
(一)目标及要求 1、内容完整; 2、表述清楚和准确; 3、充分考虑最新技术水平; 4、为未来技术发展提供框架; 5、能被未参加标准编制的专业人员所理解。
标准编写的基本规则
(二)统一性 1、结构的统一; 2、文体的统一; 3、术语的统一。
编写标准需要掌握的基础标准
3、标准编写规则 GB/T20001.1 第1部分:术语; GB/T20001.2 第2部分:符号; GB/T20001.3 第3部分:信息分类编码; GB/T20001.4 第4部分:化学分析方法; GB/T20001.5 第5部分:产品标准
五、标准编写与制修订程序
(一)预阶段 (二)立项阶段 (三)起草阶段 (四)征求意见阶段 (五)审查阶段 (六)报批阶段 (七)出版阶段 (八)复审阶段 (九)废止阶段
(一) 预阶段:在研究论证的基础上提出制定项目建议。 (二) 立项阶段:对项目建议进行必要的、可行性分析和充分论证。 (三) 起草阶段:编写标准草案(征求意见稿)编写编制说明。 (四) 征求意见阶段:广泛征求意见。 (五) 审查阶段:会审或函审,对送审稿进行审查。根据意见并对送审稿进行修改形成报批稿。
标准编写的基本规则
(三)协调性 1、普遍协调; 2、特殊协调; 3、本领域协调。
标准编写的基本规则
(四)适用性 1、便于直接使用; 2、便于引用。 (五)一致性 1、保持与国际文件一致; 2、明确一致性程度。
标准编写的基本规则
(六)规范性 1、预先设计; 2、遵守制定程序和编写规则; 3、特定标准的制定须符合相应基础标准的规定。
术语和定义
┅┅┅┅
规范性附录
要求
规范性技术要素
规范性要素
规范性要素如图:
11大模板建筑施工65页PPT
加劲肋的间距与面板厚度的比值小于或等于 100时,面板按小挠度连续板设计。 (2)
大模板的加劲肋主要是为了增加面板的刚度, 承受和传递新浇筑混凝土的侧压力。加劲肋的设计 由强度和刚度控制,计算简图为连续梁。
(3) 大模板的竖楞设计由强度和刚度控制,计算简
图为两跨连续梁,穿墙螺栓即为支座。根据竖楞与 加劲肋的焊缝长度能否满足焊缝计算长度要求,竖 楞设计时可按面板、竖向小肋和竖楞共同工作进行 强度和刚度的验算,或者按竖楞单独工作进行强度 和刚度的验算。
11 大模板建筑施工
本章内容:大模板建筑的结构类型和特点;大模板
的分类、构造要求、结构设计的基本内容;大模板 建筑施工要点、质量标准。
学习要求:
要了解大模板建筑结构整体性好,抗震能力强, 施工方便,机械化程度高的特点;
了解大模板的受力分析,传力途径和结构设计 基本内容;
熟悉现浇内墙、预制外墙板大模板的施工程序、 技术要求和操作要点;
穿墙螺栓的作用是加强模板的刚度, 控制模板的间距。穿墙螺栓的连接构造见 图11.2所示。
11.2.1.3 大模板的构造
(1)平模
整体式平模板是以一面墙制作一块模板。其构造见
图11.3(a) 所示。
采用平模布置方案的主要特点是横墙与纵墙混凝土
分两次浇筑。
在一个流水段范围内,先支横墙模板,待拆模后再
于大模板的自稳角α
自稳角α:即大模板在风力作用下,依靠自重
保持其稳定的板面与垂直面的最大夹角,见图 11.9所示。
大模板的抗倾覆验算,可根据大模板所在楼层和风
力的大小及大模板的自重,按下列公式验算
arcsin 4W2g2 g
2W
α--- g---大模板单位面积平均自重, g=G/H, kN/m2; W---风荷载,kN/m2。
SW11 第11章 框架与模板电子课件
“index”模板,打开模板文件。 2.输入“长春介绍”,设置字体字号。 3.插入水平线,宽度设为85%,高度为“3”,无阴影。 4.插入“导航条”。 5.输入“长春是个具有欧洲田园城市规划特点的城 市,”等文本,并排版。 6.添加网页背景图像“snow.gif” 7.单击菜单栏中“文件”|“保存”命令,保存己设计 好的模板。
(一)保存框架集的操作: 1.在框架面板中,选择中要保存的框架集。 2.单击菜单栏中“文件”|“保存框架页”命令。 3.打开“另存为”对话框,设置保存位置和文件名,单 击“保存”按钮,保存了框架集网页。 (二)保存框架的操作: 1.定位光标在要保存的框架内,或在框架面板中选择要 保存的框架。 2.单击菜单栏中“文件”|“保存框架”命令,打开另存 为对话框。 3.打开“另存为”对话框,设置保存位置和文件名,单 击“保存”按钮,保存了框架。
第11章
框架与模板
28
上机: 实训11,自己选择运用框架和模板制作网 页; 练习: 练习11,写到书上或者网站上。
2018/7/25
第11章
框架与模板
29
2018/7/25
第11章
框架与模板
5
11.1 框架布局
11.1.3 设置框架的属性
(一)设置框架集属性:选中框架集,打开框集属性
1.边框选项设置 2.框架集中框架大小设置 (二)设置框架属性 选择框架后(如选择左侧框架),打开框架属性
2018/7/25
第11章
框架与模板
6
11.1 框架布局
11.1.4 保存框架
第11章 框架与模板
内容提要 框架是浏览器窗口中的一个区域,框架集 是一组html文件组成的多个框架的集合,它定 义了框架如何显示及其相关布局。 模板是为了控制页面中布局的需要而产生 的,如果许多页面使用相同的布局,可以考虑 使用模板进行控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
堆栈是一种先进后出的数据结构,默认情况下stact容器基 于deque<T>顺序容器实现。对于stact容器,只能访问最近 存入容器中的元素。 下面的代码用于定义堆栈: stack<Employee> emps; stack的基础容器必须支持back()、push_back()和 pop_back()操作。
插入迭代器是一个可以向顺序容器vector<T>、deque<T>和list<T>中 的任何一个添加新元素的迭代器。插入迭代器有3类: back_insert_iterator<T>在类型T的容器末尾插入元素。 front_insert_iterator <T>在类型T的容器开头插入元素。 insert_iterator <T>在类型T的容器任意位置插入元素。 需要注意,front_insert_iterator迭代器会调用容器的push_front()函数, 因此支持front_insert_iterator迭代器的容器有list和deque。 back_insert_iterator迭代器调用容器的push_back()函数,因此支持 back_insert_iterator的容器有vector、list和deque。关联容器不支持 front_insert_iterator和back_insert_iterator迭代器。insert_iterator迭代器 调用容器的insert()方法进行插入。
ቤተ መጻሕፍቲ ባይዱ
与输入流迭代器相对应,ostream_iterator<T>模板提供了 向输出流写类型T的对象的输出流迭代器。创建输出流迭代器 的方法如下: ostream_iterator<int> out(cout); 该模板的类型实参int指定要处理的数据类型,构造函数实 参out指定将作为数据的目的地的流,以便out迭代器能将in类 型的值写到标准输出流中。
STL是为本地C++编辑器提供的一个类与函数模板的集合。STL的一个 重要特点是数据结构和算法的分离。这种分离使得STL变得非常通用。 STL主要包含三个基本组件:容器、迭代器和算法。容器是一种数据 结构,用来存储和管理其他对象。实现链表的类就是一个容器的示例。 STL提供了一组具有不同特性的容器,在应用程序中可以概据需要选择不 同的容器。 迭代器提供了访问容器中对象的方法。迭代器就如同一个指针。事实 上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了 operator*()以及其他类似于指针的操作符地方法的类对象。 算法是用来操作容器中数据的模板函数。例如,STL用sort()方法可以 容器中的内容进行排序。函数本身与他们操作的数据类型无关,因此他 们可以在从简单数组到高度复杂容器的任何数据结构上使用。
vector可以用于使用C++数组的地方,它是一个非常有效、 一般意义上的容器。但是,如果需要在元素序列中频繁插入 或删除元素,则使用vector容器并不理想。list容器的主要优 点是所有的插入和删除操作所需的时间固定。其缺点是不能 随机访问元素。
1.创建list容器 .创建 容器 2.访问list容器中的元素 .访问 容器中的元素 3.操作list容器 .操作 容器
算法为使用迭代器访问的对象集合提供了计算和分析函数。它们是通 过迭代器访问数据元素,所以算法不需要知道要处理对象的来源。对象 可以由容器中甚至流中的迭代器检索。下图列出使用容器、迭代器和算 法的方式。
STL容器类的模板在标准头文件中定义,表11-1列出了最常使 用的各种容器类的头文件。
11.2.1 vector顺序容器 顺序容器
函数fill和fill_n将将容器中一定范围的元素设置为特定值。雨数 generate和generate_n是产生器函数,用于生成容器中一定范围的元素 值。产生器函数不取参数,并返回可以放在容器元素中的值。
常用的数学算法包括random_shuffle、count、min_element、 max_element、accumulate和transform。其中random_shuffle函数随机 排序容器中的元素,函数count计算容器中元素为给定值的元素个数,函 数min_element统计容器中元素的最小值,返回最小元素位置的迭代器, 函数max_element则min_element相反,它返回容器中最大元素的迭代器, transform函数则对容器中的每个元素采用常用函数对象。
1.创建vector容器 .创建 容器
2.访问vector容器中的元素 .访问 容器中的元素 3.在vector容器中插入和删除元素 . 容器中插入和删除元素 4.存储指针 .
5.应用算法 .
deque顺序容器非常类似于vector容器,其功能与vector容器相同,并且包 含同样的成员函数,但可以在deque容器的开头和末尾高效地添加或删除元 素。例如: deque<Employee> emps; 向容器的前端添加元素的函数是push_front(),可以通过调用pop_front() 函数来删除第一个元素。因此,可以像下面这样在容器的前端添加元素: emps.push_front(Employee("刘丽","1980-09-12","2005-05-23",1800)); 也可以在创建deque容器时添加一组元素: deque<int> values(5,9); deque<int> data(values.begin()+2,values.begin()+4); 尽管deque容器与vector容器非常相似,而且能处理vector容器能处理的任 何事情,还允许有效地在序列前添加元素,但是与vector容器相比它有一个 缺点。由于它提供了额外的能力,使得deque容器的内存管理比较复杂,因 此它的执行略慢于vector容器。在程序中选择容器时,除非必须在前端添加 元素,否则vector容器是更好的选择。
下面的代码演示如何创建输入流迭代器: istream_iterator<int> numInput(cin); 这段代码创建的输入流迭代器类型为istream_iterator<int>, 它可以指向输入流中的int类型的对象。标准输入流cin作为迭 代器的构造函数的参数传递,因此该输入流迭代器将可以从 标准输入流cin中读取整数。
多重映射容器multimap是允许元素有重复键的map容器。 其他方面它与map容器相同,并有一组类似的操作。元素的 键可以重复就表示,不能对multimap容器使用下标运算符。 要给multimap容器添加元素,可以使用insert()成员函数,这 要求参数是一个适合于容器实例的pair<K,T>对象。 当有了重复的键,就需要确定哪些元素对应于给定的键。 multimap容器的find()成员函数返回一个迭代器,它指向与给 定键对应的第一个元素。upper_bound()函数成员也返回一个 迭代器,它指向与键对应的第一个元素大于传送为参数的键。 因此,可以组合使用这些函数,确定给定键对应的所有元素。
STL算法不依赖于所操作容器的实现细节。只要容器的迭 代器符合算法要求,STL算法就会像处理STL容器一样进行 处理。在<algorithm>和<numeric>头文件中定义了大量的算 法,其中<numeric>头文件中的这些算法主要用来处理数组 中的数值,而<algorithm>头文件中的算法大多用来搜索、排 序和合并迭代器指定的对象序列。
标准模板库(Standard Template Library,STL)是一个由类模板与函数 模板组的库。使用这些模板可以创建范围广泛且功能强大的通用类,从而用 这些类来组织数据以及用各种方式处理数据的函数。STL是ANSI/ISO C++的 重要组成部分,因此所有C++编辑器都提供了对此的支持。 当然本地C++的STL不适用于C++/CLI类类型,但在Visual C++ 2008提供 了STL的另一个版本,它包含可以用C++/CLI类类型的类模板和函数模板。 STL提供的功能 STL顺序容器的使用 STL容器适配器 STL关联容器 STL迭代器 STL提供的算法 在C++/CLI中使用STL
流迭代器作为指向输入或输出的指针,它可以用来在流和 任何使用迭代器的源和目的地之间传输数据。<iterator>头文 件定义了两个流迭代器模板,其中istream_iterator<T>用于 输入流,ostream_iterator<T>用于输出流,其中T是要从流 中读取的数据或写入流中的数据类型。另外,还定义了3个插 入模板:inserter<T>、back_inserter<T>和front_inserter<T>, 其中T是在其中插入数据的顺序容器类型。
map模板是用四个模板参数定义的,但正常情况下,只需要指定前两 个参数。第一个参数是键的类型,第二个参数是要存储的对象类型。第 三个和第四个模板参数定义了用于比较键的函数对象类型和用于在map容 器中分配内存空间的对象类型。在大多数情况下,这两个参数使用默认 值即可。 map容器的默认构造函数创建一个空的map容器。例如,可以创建一 个naap容器,存储Employee对象,其键是string类型,如下所示: map<string,Employee> emps; 第一个模板参数指定键的类型为string,第二个模板参数指定与键关联 的对象类型是Employee。这里,键可能是表示姓名的字符串。当然,这 两个模板参数也可以是基本类型,如int、double或char。
关联容器能对每个对象都与一个关联键(set<T> 则以对象本身为键)一起存储,在内部对象按键的 排序存储。在插入一个新元素时,会自动使用键在 容器的适当位置上放置该元素,使排序顺序保持不 变。 在C++中,有4种不同类型的关联容器:map、 set、multimap和multiset,本节将给与介绍。