第十章C++标准模板库
- 格式:ppt
- 大小:647.50 KB
- 文档页数:44
C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。
容器往往包含同一类型的数据。
STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。
.一. vector1.声明:一个vector类似于一个动态的一维数组。
vector<int> a; //声明一个元素为int类型的vector avectot<MyType> a; //声明一个元素为MyType类型的vector a这里的声明的a包含0个元素,既a.size()的值为0,但它是动态的,其大小会随着数据的插入和删除改变而改变。
vector<int> a(100, 0); //这里声明的是一已经个存放了100个0的整数vector 2.向量操作常用函数:size_t size(); // 返回vector的大小,即包含的元素个数void pop_back(); // 删除vector末尾的元素,vector大小相应减一void push_back(); //用于在vector的末尾添加元素T back(); // 返回vector末尾的元素void clear(); // 将vector清空,vector大小变为0其他访问方式:cout<<a[5]<<endl;cout<<a.at(5)<<endl;以上区别在于后者在访问越界时会抛出异常,而前者不会。
例:int intarray[10];vector<int> first_vector(intarray, intarray + 10);vector<int> second_vector(first_vector.begin(),first_vector.end());class man{public:AnsiStirng id;AnsiString mc;}vector<man> manList;man thisman;thisman.id="2001";="yourname";manList.push_back thisman; //加入第一个元素thisman.id="2002";="myname";manList.push_back thisman; //加入第二个元素manList.clear(); //清空3.遍历(1). for(vector<datatype>::iterator it=a.begin(); it!=a.end();it++)cout<<*it<<endl;(2). for(int i=0;i<a.size;i++)cout<<a[i]<<endl;二. mapMap是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性map内部的实现自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能。
11.1 基本数据结构知识11.2 标准模板类库STL 简介11.3 向量11.4 链表类的使用11.5 双端队列11.6 栈与队列11.7 集合第11 章标准模板类库STLC++语言的标准模板类库STL(Standard Template Library)已经成为一个标准,它是一个基于模板的群性类库,包含群体类(链表、向量、栈、队列、集合、映象),算法(排序、查找)以及迭代子(iterator)。
本章将着重介绍STL 的使用。
实现了数组和链表,它们属于线性群体。
还有两种特殊的线性群体:栈和队列。
Ele1……Ele2Elen入栈出栈栈顶栈底图栈的示意图栈是只能从一端访问的线性群体,可以访问的这一端称栈顶,另一端称栈底。
对栈顶位置的标记称为栈顶指针,对栈底位置的标记称为栈底指针。
向栈顶添加元素称为“压入栈”(push),删除栈顶元素称为“弹出栈”(pop)。
栈中元素的添加和删除操作具有“后进先出”(LIFO )的特性。
【11.1 基本数据结构知识】有一种限定的线性数据群体叫双端队列,它类似于限定删除和插入操作都必须在两端进行的链表。
队列是一种特殊的线性群体。
队列只能向一端添加元素,从另一端删除元素的线性群体,可以添加元素的一端称队尾,可以删除元素的一端称队头。
对队头位置的标记称为队头指针,对队尾位置的标记称为队尾指针。
Ele1出队入队Ele2Elen ……队头队尾非线性群体:集合和映射。
集合由若干个元素组成,对于一个指定的元素,它或者属于该集合,或者不属于;可以对两个集合求交集和差等。
映射则类似于字典的功能,如一个身份证号码可以映射为某个确定的人,图书馆中一本书的编号和这本书也是一个映射。
向队尾添加元素称为“入队”,删除队头元素称为“出队”。
队列中元素的添加和删除操作具有“先进先出”(FIFO )的特性。
图队列的逻辑结构示意图1994年7月,STL 正式成为标准C++库的一部分。
STL 中的群体类是基于模板的,它既包含线性群体类,也包含非线性群体类,其中主要有:vector(向量)list(链表)stack(栈)queue(队列)deque(双端队列)set(集合)map(映射)STL 的迭代子可以看成是指针的推广,迭代子也可以是普通的指针。