标准模板库STL学习总结
- 格式:docx
- 大小:15.63 KB
- 文档页数:7
C++:STL标准⼊门汇总学⽆⽌境第⼀部分:(参考百度百科)⼀、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的⼀系列软件的统称。
它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室⼯作时所开发出来的。
现在虽说它主要出现在C++中,但在被引⼊C++之前该技术就已经存在了很长的⼀段时间。
STL的代码从⼴义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),⼏乎所有的代码都采⽤了模板类和模版函数的⽅式,这相⽐于传统的由函数和类组成的库来说提供了更好的代码重⽤机会。
在C++标准中,STL被组织为下⾯的13个头⽂件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
⼆、算法⼤家都能取得的⼀个共识是函数库对数据类型的选择对其可重⽤性起着⾄关重要的作⽤。
举例来说,⼀个求⽅根的函数,在使⽤浮点数作为其参数类型的情况下的可重⽤性肯定⽐使⽤整型作为它的参数类性要⾼。
⽽C++通过模板的机制允许推迟对某些类型的选择,直到真正想使⽤模板或者说对模板进⾏特化的时候,STL就利⽤了这⼀点提供了相当多的有⽤算法。
它是在⼀个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的⼏类,然后就可以在模版的参数中使⽤⼀种类型替换掉同⼀种类中的其他类型。
STL提供了⼤约100个实现算法的模版函数,⽐如算法for_each将为指定序列中的每⼀个元素调⽤指定的函数,stable_sort以你所指定的规则对序列进⾏稳定性排序等等。
Priority_queuepriority_queue是一种按元素权值大小进行排序的队列的一种数据结构,而在STL中的priority_queue调用 STL里面的 make_heap(), pop_heap(),push_heap() 算法实现,也算是堆的另外一种形式。
priority_queue 对于基本类型的使用方法相对简单。
他的模板声明带有三个参数,priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比较方式。
Container 必须是用数组实现的容器,比如vector, deque 但不能用 list.STL里面默认用的是 vector. 比较方式默认用operator< , 所以如果你把后面俩个参数缺省的话,优先队列就是大顶堆,队头元素最大。
Priority_queue常用方法有pop(),top(),push(),empty(),size ()。
如果要用到小顶堆,则一般要把模板的三个参数都带进去。
STL里面定义了一个仿函数 greater<>,对于基本类型可以用这个仿函数声明小顶堆例子:对于自定义类型,则必须自己重载 operator< 或者自己写仿函数。
对于编程人员来说STL是一个强大的工具,不仅提高了代码的重用性,大大降低程序员的工作量,而且减少了代码的行数,使程序更加容易理解,便于维护。
如将第一部分的编写的优先队列代码与用STL中Priority_queue实现的进行对比如下:STL中priority_queue:#include <iostream>#include <queue>using namespace std;int N = 0 ;struct Node{ //自定义的数据类型intnum ;char name[10] ;int priority ;Node(inta,charstr[],int b){num = a ;strcpy(name,str) ;priority = b ;}};bool operator<( Node a, Node b ){ //重载operator<if(a.priority==b.priority)returna.num>b.num ;returna.priority<b.priority ;}int main(){priority_queue<Node> Q; //定义优先队列Q。
2011/4/17STL 简介,标准模板库STL 简介,标准模板库作者:Scott Field 这篇文章是关于C++语言的一个新的扩展——标准模板库的(Standard Template Library),也叫STL。
当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话题的深度和广度。
有很多内容要含盖,也有很多详细描述STL的书。
因此我重新考虑了一下我原来的想法。
我为什么要写这篇文章,又为什么要投稿呢?这会有什麽用呢?有再来一篇关于STL的文章的必要吗?当我翻开Musser and Saini的页时,我看到了编程时代在我面前消融。
我能看到深夜消失了, 目标软件工程出现了。
我看到了可维护的代码。
一年过去了,我使用STL写的软件仍然很容易维护。
让人吃惊的是其他人可以没有我而维护的很好!然而,我也记得在一开始的时候很难弄懂那些技术术语。
一次,我买了Musser&Saini,每件事都依次出现,但是在那以前我最渴望得到的东西是一些好的例子。
当我开始的时候,作为C++一部分的Stroustrup还没出来,它覆盖了STL。
因此我想写一篇关于一个STL程序员的真实生活的文章可能会有用。
如果我手上有一些好的例子的话,特别是象这样的新题目,我会学的更快。
另外一件事是STL应该很好用。
因此,理论上说,我们应该可以马上开始使用STL。
什麽是STL呢?STL就是Standard Template Library,标准模板库。
这可能是一个历史上最令人兴奋的工具的最无聊的术语。
从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map 等,STL也是算法和其他一些组件的集合。
这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。
STL的目的是标准化组件,这样你就不用重新开发它们了。
你可以仅仅使用这些现成的组件。
STL现在是C++的一部分,因此不用额外安装什麽。
STL就是St andard Templat e Library,标准模板库。
这可能是一个历史上最令人兴奋的工具的最无聊的术语。
从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。
这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。
是C++标准库的一个重要组成部分,它由Stepa nov and Lee等人最先开发,它是与C++几乎同时开始开发的;一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,C++中已经有了模板。
STL又被添加进了C++库。
1996年,惠普公司又免费公开了STL,为STL的推广做了很大的贡献。
STL提供了类型安全、高效而易用特性的STL无疑是最值得C++程序员骄傲的部分。
每一个C++程序员都应该好好学习STL。
大体上包括co ntaine r(容器)、algorit hm(算法)和iterat or(迭代器),容器和算法通过迭代器可以进行无缝连接。
一、基础知识1、泛型技术泛型技术的实现方法有多种,比如模板,多态等。
模板是编译时决定,多态是运行时决定,其他的比如RT TI 也是运行时确定。
多态是依靠虚表在运行时查表实现的。
比如一个类拥有虚方法,那么这个类的实例的内存起始地址就是虚表地址,可以把内存起始地址强制转换成int*,取得虚表,然后(int*)*(int*)取得虚表里的第一个函数的内存地址,然后强制转换成函数类型,即可调用来验证虚表机制。
泛型编程(generic program ming,以下直接以GP称呼)是一种全新的程序设计思想,和OO,OB,PO这些为人所熟知的程序设计想法不同的是GP抽象度更高,基于GP设计的组件之间偶合度底,没有继承关系,所以其组件间的互交性和扩展性都非常高。
stl标准模板库STL(Standard Template Library)标准模板库是C++标准库的一部分,它提供了一系列的通用模板类和函数,用于实现常见的数据结构和算法。
STL的设计理念是将数据结构和算法与具体的数据类型分离,使得程序员可以通过简单的方式实现复杂的数据结构和算法。
STL的使用可以大大提高程序的开发效率,同时也能够提高程序的可维护性和可重用性。
STL包含了许多常用的容器类,如vector、list、deque、set、map等,这些容器类提供了不同的数据组织方式,可以满足各种不同的需求。
除了容器类之外,STL还包含了许多常用的算法,如查找、排序、遍历等,这些算法可以直接应用于STL的容器类,为程序员提供了强大的工具库。
STL的设计遵循了泛型编程的思想,通过模板技术实现了通用性和灵活性。
这意味着STL中的大部分组件都是通过模板类和函数实现的,可以适用于各种不同的数据类型。
这种设计使得STL可以在不同的场景下发挥作用,为程序员提供了更多的选择。
在实际的程序开发中,STL的使用非常普遍。
许多常见的数据结构和算法都可以通过STL来实现,无需程序员自己去编写复杂的代码。
这不仅提高了开发效率,还可以减少代码的错误率,提高程序的稳定性。
除了提供了丰富的容器类和算法之外,STL还提供了迭代器(iterator)的概念,通过迭代器可以对容器中的元素进行遍历和访问。
迭代器提供了统一的访问接口,使得程序员可以对容器中的元素进行统一的操作,而不用关心容器的具体实现方式。
总的来说,STL标准模板库是C++程序员不可或缺的工具之一。
它提供了丰富的容器类和算法,可以大大提高程序的开发效率和质量。
同时,STL的设计理念也影响了许多其他编程语言和库的设计,可以说是现代编程中的一个经典范例。
希望通过本文的介绍,读者对STL有一个初步的了解,进而能够在实际的程序开发中灵活运用STL,提高自己的编程水平和工作效率。
C++之STL总结精华笔记⼀、⼀般介绍STL(StandardTemplate Library),即标准模板库,是⼀个具有⼯业强度的,⾼效的C++程序库。
它被容纳于C++标准程序库(C++Standard Library)中,是ANSI/ISOC++标准中最新的也是极具⾰命性的⼀部分。
该库包含了诸多在计算机科学领域⾥所常⽤的基本数据结构和基本算法。
为⼴⼤C++程序员们提供了⼀个可扩展的应⽤框架,⾼度体现了软件的可复⽤性。
从逻辑层次来看,在STL中体现了泛型化程序设计的思想(genericprogramming),引⼊了诸多新的名词,⽐如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代⼦(iterator)等。
与OOP(object-orientedprogramming)中的多态(polymorphism)⼀样,泛型也是⼀种软件的复⽤技术;从实现层次看,整个STL是以⼀种类型参数化(typeparameterized)的⽅式实现的,这种⽅式基于⼀个在早先C++标准中没有出现的语⾔特性--模板(template)。
如果查阅任何⼀个版本的STL源代码,你就会发现,模板作为构成整个STL的基⽯是⼀件千真万确的事情。
除此之外,还有许多C++的新特性为STL的实现提供了⽅便;⼆、STL的六⼤组件· 容器(Container),是⼀种数据结构,如list,vector,和deques ,以模板类的⽅法提供。
为了访问容器中的数据,可以使⽤由容器类输出的迭代器;· 迭代器(Iterator),提供了访问容器中对象的⽅法。
例如,可以使⽤⼀对迭代器指定list或vector中的⼀定范围的对象。
迭代器就如同⼀个指针。
事实上,C++的指针也是⼀种迭代器。
但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地⽅法的类对象;· 算法(Algorithm),是⽤来操作容器中的数据的模板函数。
c++stl使用方法总结C++标准模板库(STL)是C++的一个重要组成部分,提供了许多常用的数据结构和算法。
下面是对C++ STL使用方法的总结:1. 容器(Containers):vector,可变大小的动态数组,使用push_back()添加元素,使用下标访问元素。
list,双向链表,使用push_back()和push_front()添加元素,使用迭代器访问元素。
deque,双端队列,类似于vector,但可以在前后两端高效地添加和删除元素。
set,有序集合,不允许重复元素,使用insert()插入元素,使用迭代器访问元素。
map,有序键值对集合,不允许重复键,使用insert()插入键值对,使用迭代器访问元素。
unordered_set,无序集合,使用哈希表实现,不允许重复元素。
unordered_map,无序键值对集合,使用哈希表实现,不允许重复键。
2. 迭代器(Iterators):迭代器用于遍历容器中的元素,可以使用begin()和end()获取容器的起始和结束迭代器。
迭代器可以使用自增运算符(++)向前遍历容器中的元素,也可以使用解引用运算符()访问迭代器指向的元素。
3. 算法(Algorithms):STL提供了大量的算法,如排序、查找、拷贝、删除等。
使用算法需要包含<algorithm>头文件,例如使用sort()进行排序,使用find()进行查找。
4. 函数对象(Function Objects):函数对象是可调用对象,可以像函数一样使用。
STL提供了一些内置函数对象,如less、greater等,也可以自定义函数对象。
5. 仿函数(Functors):仿函数是一种特殊的函数对象,可以像函数一样使用,可以包含状态。
仿函数可以重载函数调用运算符(operator()),使其可以像函数一样被调用。
6. 算法调用:使用算法时,通常需要提供迭代器作为参数,指定算法的操作范围。
stl标准库STL(Standard Template Library)标准库是C++语言中的一个非常重要的组成部分,它为程序员提供了丰富的数据结构和算法,极大地提高了程序的开发效率和质量。
STL标准库包括了许多容器、迭代器、算法等组件,它们可以帮助程序员轻松地实现各种功能,从而简化了程序的开发过程。
本文将对STL标准库进行详细介绍,包括其组成部分、常用容器和算法等内容。
STL标准库的组成部分主要包括容器、迭代器、算法和函数对象。
容器是STL中最基本的组件,它用来存储数据,并提供了对数据的访问和操作接口。
常用的容器包括vector、list、deque、stack、queue、set、map等,它们分别对应了动态数组、链表、双端队列、栈、队列、集合和映射等数据结构。
迭代器是STL中用来遍历容器中元素的工具,它提供了统一的访问接口,使得程序员可以以统一的方式来访问不同类型的容器。
算法是STL中的另一个重要组件,它包括了大量的常用算法,如查找、排序、合并、删除等,可以直接应用于各种容器中的数据。
函数对象是STL中的一个重要概念,它是一种可调用对象,可以像函数一样被调用,通常用来作为算法的参数,用于指定算法的操作方式。
在STL标准库中,容器是其中最重要的部分之一。
vector是STL中最常用的容器之一,它是一个动态数组,可以根据需要动态扩展和收缩,非常适合于需要频繁插入和删除操作的场景。
list是另一个常用的容器,它是一个双向链表,可以快速地进行插入和删除操作,但在随机访问时性能较差。
deque是双端队列,可以在两端进行快速插入和删除操作,比vector和list都要高效。
除了这些基本容器外,STL标准库还提供了stack、queue、set、map等容器,它们分别对应了栈、队列、集合和映射等数据结构,可以满足不同场景下的需求。
除了容器外,STL标准库中的算法也是其核心部分之一。
STL中提供了大量的常用算法,如查找、排序、合并、删除等,它们可以直接应用于各种容器中的数据,极大地提高了程序员的开发效率。
标准模板库标准模板库,也叫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];这个例子也用到了范围,和我们上面的向量的例子一样:第一个参数是指向要操作的范围的头的指针,第二个参数是指向尾的指针。
stl标准模板库STL(Standard Template Library)标准模板库是C++标准库的一部分,它提供了一系列的通用模板类和函数,用于实现常见的数据结构和算法。
STL的设计理念是将数据结构和算法进行有效地组织和封装,使得程序员可以更加高效地进行软件开发,同时也提高了代码的可重用性和可维护性。
STL包含了多个重要的组件,包括容器(Containers)、迭代器(Iterators)、算法(Algorithms)和函数对象(Function Objects)。
这些组件为C++程序员提供了丰富的工具,可以方便地进行数据操作和算法实现。
首先,容器是STL中最重要的组件之一,它提供了多种数据结构,如向量(vector)、链表(list)、集合(set)、映射(map)等。
这些容器可以存储不同类型的数据,并且提供了丰富的操作方法,例如插入、删除、查找等。
使用STL容器可以大大简化数据结构的实现和管理,提高了程序的效率和可维护性。
其次,迭代器是STL中用于遍历容器中元素的重要工具,它提供了统一的接口,使得程序员可以方便地对容器中的元素进行访问和操作。
通过迭代器,程序员可以实现对容器中元素的遍历、查找、排序等操作,极大地提高了代码的可读性和可维护性。
另外,STL还提供了丰富的算法,如排序、查找、合并、计数等。
这些算法可以直接应用于STL容器中,极大地简化了程序员的工作,同时也提高了代码的效率和可维护性。
通过使用STL算法,程序员可以快速地实现各种常见的数据操作,而不需要重复编写相似的代码。
最后,函数对象是STL中的另一个重要组件,它提供了一种灵活的机制,可以方便地实现各种算法和操作。
函数对象可以作为参数传递给STL算法,从而实现各种定制化的操作。
通过使用函数对象,程序员可以更加灵活地实现各种复杂的逻辑,提高了代码的可复用性和可扩展性。
总之,STL标准模板库为C++程序员提供了丰富的工具,可以大大简化数据结构和算法的实现,提高了代码的效率和可维护性。
关于C++标准模板库(STL)的⼀些基本使⽤vectorvector可以理解成变长数组,即长度根据需要⽽⾃动改变的数组头⽂件:#include <vector>定义:vector<typename>name;vector内可以通过下标或者迭代器(iterator)访问(只有vector和string才允许使⽤v.begin()+3这种迭代器加整数的写法) v.push_back(value) 时间复杂度:O(1)v.pop_back() 时间复杂度:O(1)v.size() 返回的是unsigned类型时间复杂度:O(1)v.clear() 时间复杂度:O(N) N是vector中元素的个数v.insert(it,value) 时间复杂度:O(N)v.erase(it) 时间复杂度:O(N)v.erase(first,last) 即删除[first,last)内元素时间复杂度:O(N)setset可以理解成集合,⼀个内部⾃动有序且不含重复元素的容器头⽂件:#include <set>定义:set<typename>name;set只能通过迭代器访问s.insert(value) 时间复杂度:O(logN) N为set内元素个数s.find(value) 时间复杂度:O(logN) N为set内元素个数s.erase(it) 时间复杂度:O(1)s.erase(value) 时间复杂度:O(logN)s.erase(first,last) 时间复杂度:O(last−first)s.size() 时间复杂度:O(1)s.clear() 时间复杂度:O(N)set中元素是唯⼀的,如果需要处理不唯⼀的情况,则需要使⽤multiset。
另外,C++11标准中还增加了unordered_set,以散列代替set内部的红⿊树(⼀种⾃平衡⼆叉查找树),使其可以⽤来处理只去重但不排序的需求,速度⽐set要快得多。
实验报告_实验14 标准模板库STL(1)(学生学号_姓名)实验目的:1、理解标准模板库STL的基本概念:容器、迭代器和算法;2、熟悉顺序容器:vector、list和deque的基本用法;3、熟悉函数对象的概念、基本应用。
实验内容1、(基础题)请分析、运行下列程序代码,回答相关问题,体会vector用法:(1)代码1问题:1)创建vector对象常有哪些方法?答:用vector <类型> 对象名创建。
2)写出访问vcctor元素的4种不同方法;答:使用迭代器访问。
用数组的形式访问。
3)如何在vector尾部插入元素?答:使用迭代器名.push_back()函数。
2、(基础题)请根据题意,填写程序所缺代码,并运行、验证:答:(1):int i=0(2):i<_str.size()(3):i++(4):_str[i](5):vec1.begin()(6):vec1.end()(7):erase(vec1.begin(),vec1.end())(8):erase(vec2.end()-1)3、(基础题)请分析、运行下列程序代码,回答相关问题,体会list用法:问题:1)如何创建list对象?答:list<类型对象名;2)怎样访问list元素?答:使用迭代器访问3)如何将list排序?答:使用list对象.sort()函数。
4.#include<list>#include<iostream>using namespace std;void main(){int i,t;int temp[30];for(i=0;i<30;i++)temp[i]=1;list<int> go;go.clear();for(i=0;i<30;i++)go.push_back(i);list<int>::iterator g = go.begin();while(go.size()>15){for(i=1;i<9;++i){++g;if(g==go.end())g=go.begin();}t=*g;temp[t]=0;g=go.erase(g);if(g==go.end())g=go.begin();}cout<<"1:基督徒\n2:非基督徒\n";cout<<"当初的排列顺序为:\n";for(i=0;i<30;i++){static int c=0;++c;cout<<temp[i]<<" ";if(c%5==0)cout<<" ";}cout<<endl;}。
标准模板库STL学习总结标准模板库就是类与函数模板的大集合.stl共有6种组件:容器,容器适配器,迭代器,算法,函数对象和函数适配器.1、容器:容器是用来存储和组织其他对象的对象.stl容器类的模板在标准头文件中定义.主要如下所示①序列容器基本的序列容器是上面图中的前三类:关于三者的优缺点主要是:a:vector<t>矢量容器:可以随机访问容器的内容,在序列末尾添加或删除对象,但是因为是从尾部删除,过程非常慢,因为必须移动插入或删除点后面的所有对象.矢量容器的操作:(自己以前有个表,贴出来大家看看)其中的capacity表示容量,size是当前数据个数.矢量容器如果用户添加一个元素时容量已满,那么就增加当前容量的一半的内存,比如现在是500了,用户添加进第501个,那么他会再开拓250个,总共就750个了.所以矢量容器当你添加数据量很大的时候,需要注意这一点哦...如果想用迭代器访问元素是比较简单的,使用迭代器输出元素的循环类似如下:vector<int>::iterator表示矢量容器vector<int>的迭代器...for(vector<int>::iteratoriter=number.begin();iter<numb er.end();iter++)//这里的iteratoriter算是一个指针了cout<<""<<*iter;当然也可以用我们自己的方法,但是感觉用上面的更好一些.for(vector<int>::size_typei=0;i<number.size();i++)cout<< ""<<number[i]排序矢量元素:对矢量元素的排序可以使用<algorithm>头文件中定义的sort()函数模板来对一个矢量容器进行排序.但是有几点要求需要注意sort()函数模板用<运算符来排列元素的顺序,所以容器中对象必须可以进行<运算,如果是基本类型,可以直接调用sort(),如果是自定义对象,必须对<进行运算符重载两个迭代器的指向必须是序列的第一个对象和最后一个对象的下一个位置.比如:sort(people.begin(),people.end());//这里两个参数就是迭代器的意思了b:deque<t>容器:非常类似vector<t>,且支持相同的操作,但是它还可以在序列开头添加和删除.deque<t>双端队列容器与矢量容器基本类似,具有相同的函数成员,但是有点不同的是它支持从两端插入和删除数据,所以就有了两个函数:push_front和pop_front.并且有两个迭代器变量#include<deque>deque<int>data;//创建双端队列容器对象deque<int>::iteratoriter;//书序迭代器deque<int>::reverse_iteratorriter;//逆序迭代器.//iter和riter是不同的类型c:list<t>容器是双向链表,因此可以有效的在任何位置添加和删除.列表的缺点是不能随机访问内容,要想访问内容必须在列表的内部从头开始便利内容,或者从尾部开始.②关联容器map<k,t>映射容器:k表示键,t表示对象,根据特定的键映射到对象,可以进行快速的检索.有关它的创建以及查找的操作作如下总结//创建映射容器map<person,string>phonebook;//创建要存储的对象pair<person,string>entry=pair<person,string>(person("mel"," gibson"),"213345567");//插入对象phonebook.insert(entry);//只要映射中没有相同的键,就可以插入entry//访问对象stringnumber=phonebook[person("mel","gibson")];//如果这个键不存在,会默认将这个键插入//如果不想在找不到的时候插入,可以先查找然后再检索personkey=person("mel","gibson");map<person,string>::iterat oriter=phonebook.find(key);//创建迭代器,就认为是指针就好了if(iter!=phonebook.end())stringnumber=iter->second;2、容器适配器:容器适配器是包装了现有的stl容器类的模板类,提供了一个不同的、通常更有限制性的功能.具体如下所示a:queue<t>队列容器:通过适配器实现先进先出的存储机制.我们只能向队列的末尾添加或从开头删除元素.push_back()pop_front()代码:queue<string,list<string>>names;(这就是定义的一个适配器)是基于列表创建队列的.适配器模板的第二个类型形参指定要使用的底层序列容器,主要的操作如下b:priority_queue<t>优先级队列容器:是一个队列,它的顶部总是具有最大或最高优先级.优先级队列容器与队列容器一个不同点是优先级队列容器不能访问队列后端的元素.默认情况下,优先级队列适配器类使用的是矢量容器vector<t>,当然可以选择指定不同的序列容器作为基础,并选择一个备用函数对象来确定元素的优先级代码如下priority_queue<int,deque<int>,greate<int>>numbers;c:stack<t>堆栈容器:其适配器模板在<stack>头文件中定义,默认情况下基于deque<t>容器实现向下推栈,即后进先出机制.只能访问最近刚刚进去的对象//定义容器stack<person>people;//基于列表来定义堆栈stack<string,list<string>>names;基本操作如下:3、迭代器:具体它的意思还没怎么看明白,书上介绍迭代器的行为与指针类似,这里做个标记具体分为三个部分:输入流迭代器、插入迭代器和输出流迭代器.看这一章的内容看的我有点抑郁了都,摘段课本介绍的内容,还是可以帮助理解的<iterator>头文件中定义了迭代器的几个模板:①流迭代器作为指向输入或输出流的指针,他们可以用来在流和任何使用迭代器或目的地之间传输数据.②插入迭代器可以将数据传输给一个基本序列容器.头文件中定义了两个流迭代器模板:istream_iterator<t>用于输入流,ostream_iterator<t>用于输出流.t表示从流中提取数据或写到流中的对象的类型.头文件还定义了三个插入模板:insert<t>,back_insert<t>和front_inset<t>.其中t也是指代序列容器中数据的类型.输入流迭代器用下面的程序来说明下,可见具体注释#include<iostream>#include<vector>#include<numeric>#incl ude<sstream>usingnamespacestd;intmain(){//定义矢量容器vector<int>numbers;cout<<"请输入整数值,以字母结束:";//定义输入流迭代器.注意两个不同//1、numberinput(cin)是指定迭代器指向流cin//2、numbersend没有指定,是默认的,默认构造了一个end_of_stream的迭代器,它等价于调用end()istream_iterator<int>numbersinput(cin),numbersend;//用户输入,直到输入的不是int类型或者终止时结束.while(numbersinput!=numbersend)numbers.push_back(*number sinput++);cout<<"打印输出:"<<numbers.at(3)<<endl;//如何指定输入流呢?//确定字符串stringdata("2.13.636.52634252.963.8");//指定data为输入流input.需要头文件<sstream>istringstreaminput(data);//定义迭代器istream_iterator<double>begin(input),end;//计算数值和.//acculumate为头文件<numeric>下定义的函数.//第一个参数是开始迭代器,第二个是终止迭代器(最后一个值的下一个).第三个是和的初值,注意必须用0.0,用它确定数据类型是doublecout<<"打印数据的总和:"<<accumulate(begin,end,0.0)<<endl;}输出结果:耽误时间太多.以后再写吧4、算法:算法是操作迭代器提供的一组对象的stl函数模板,对对象的一个操作,可以与前面的容器迭代器结合起来看.如下图介绍5、函数对象:函数对象是重载()运算符的类类型的对象.就是实现operator()()函数.函数对象模板在<functional>头文件中定义,必要时我们也可以定义自己的函数对象.做个标记6、函数适配器:函数适配器是允许合并函数对象以产生一个更复杂的函数对象的函数模板.版权声明:本文为博主原创文章,未经博主允许不得转载.。