当前位置:文档之家› 10第十章 C++标准模板库

10第十章 C++标准模板库


STL的关键组件
算法
取出 放入 迭代器 迭代器 选用
容器
迭代器
容器
函数对象
C++ STL 主要组件的关系
容器 仓库
数据
原料
迭代子
工人
算法
车床
函数对象
刀具
容器
概 念 和 术 语
容器类是容纳、包含一组元素对象或元素集合 的类。 异类容器类与同类容器类; 顺序容器与关联容器 七种基本容器: – 向量(vector)、双端队列(deque)、列表 (list)、集合(set)、多重集合 (multiset)、映射(map)和多重映射 (multimap) 注意:容器不像数组,它可以是空容器!Why?
for(i = 3; i < n; i++) 找出哪些语句使用 { if (primecount == A.size()) 了向量的接口? A.resize(primecount + 10); if (i % 2 == 0) continue; j = 3; while (j <= i/2 && i % j != 0) j += 2; if (j > i/2) A[primecount++] = i; } for (i = 0; i<primecount; i++)//输出质数 { cout<<setw(5)<<A[i]; if ((i+1) % 10 == 0) //每输出10个数换行一次 cout << endl; } cout<<endl; }
25
//输出向量容器的信息 cout << "\n max_size(): " << StrVector.max_size() << "\n size(): " << StrVector.size() << "\n capacity(): " << StrVector.capacity() << endl; swap (StrVector[1], StrVector [3]); //交换第二个和第四个元素 //在元素"?"前插入字符串 "there" StrVector.insert (find(StrVector.begin(), StrVector.end(),"?"),"there"); StrVector.back() = "!";//将最后一个元素设置为"!" //输出向量容器中的元素,通过空格隔开 copy (StrVector.begin(), StrVector.end(), ostream_iterator<string>(cout," ")); //输出向量容器的信息 cout << "\n max_size(): " << StrVector.max_size() << "\n size(): " << StrVector.size()<< "\n capacity(): " << StrVector.capacity() << endl; }
是将所有容器所用的处理函数提炼,抽象成可共 用的函数的总称。剥离了“为谁干”和“干什么”功 能,专司“干什么”之职。 C++标准模板库中包括70多个算法 – 其中包括查找算法,排序算法,消除算法,记 数算法,比较算法,变换算法,置换算法和容 器管理等等。 这些算法的一个最重要的特性就是它们的统一 性,并且可以广泛用于不同的对象和内置(基 本)的数据类型。
21
cout << "Data in Container-1 :" << container1[0] << container1[1] << container1[2] <<"\n"; cout << "Data in Container-2 :" << container2[0] << container2[1] << container2[2] <<"\n"; cout << "After do container1 = container2 "<<"\n"; container1 = container2; cout << "Data in Container-1 :" << container1[0] << container1[1] << container1[2] <<"\n"; cout << "Data in Container-2 :" << container2[0] << container2[1] << container2[2] <<"\n"; }
– 迭代器适配器 – 函数对象适配器。
迭代器
概 念 和 术 语
迭代器是面向对象版的指针,它们提供了访 问容器、序列中每个元素的方法。 通俗讲,就是“定位器”、 “映射器” ,是指 针的泛化。 如军事上的夜视仪,寻的雷达,瞄准镜;还 有旅游向导;网络的搜索引擎等等。
算法
概 念 和 术 语
是为每个人各自修建到达其目的 地的道路,还是大家都使用公共 交通?
顺序容器
容 器
顺序容器:其中的元素被视为逻辑上线性排列 的,有头有尾,有前导有后继,索引值即位置 值。 以上特点使顺序容器可以随机访问其中的元 素。 STL 提供三个基本顺序容器: – vector list deque STL 还提供三个容器适配器: – stack queue priority_queue
顺序容器的接口(通用方法)
容 器
– 插入方法
push_front(),push_back(),insert(),运算符“=”
– 删除方法
pop_front(),pop_back () ,erase(),clear()
– 迭代访问方法
使用迭代器
– 其它顺序容器访问方法(只读访问)
front(),back(),下标[]运算符
C++语言程序设计
第十章 C++标准模板库
主要内容
泛型程序设计 与标准模板库有关的概念和术语 C++标准模板库中的容器 迭代器 标准C++库中的算法 函数对象
为何需要STL
编程的数据需要存放、组织、管理。不需要每个 程序员都从头自行设计。将已有的经典的优秀的成 果标准化、规范化、模块化,是提高软件生产率, 实现产业化的趋势; “为了建立数据结构和算法的一套标准,降低其 间的耦合关系,以提升各自的独立性、弹性、交互 操作性(相互合作性),C++社群里诞生了STL.” ——侯捷
向量的模型
vector <T> ve 接口函数:
begin() end() push_back() pop_back() resize() back() clear() size() empty() insert() swap() erase() capacity() _first _last _end
STL (Standard Templatr Library)
1993年C++标准化委员会接受了Alexandar Stepenov的提案,为C++增加了STL; 可以用来创建动态增减的数据结构; 可用于基本数据类型和扩展类型。
STL的价值
提了一套极具实用价值的零部件,以及一 个整合的极好的组织; 以泛型思维为基础提供了高层次的、系统 化的、条理分明的“软件组织分类学”; 是类型无关的,故具有很高的可复用性; 与平台无关,于是保证了可移植性。
标准模板库STL是C++语言的外延,也是面向对象 语言的高级形态,甚至超越了面向对象的设计思想, 是基本概念的升华; C++是多范型(multiparadigm)语言,它同时支持面 向过程的设计、面向对象的设计及泛型设计等多种编 程风格(范型);
泛型程序设计
( Generic Programming )
顺序容器——向量
容 器
向量属于顺序容器,用于容纳不定长线性序列 (即线性群体),提供对序列的快速随机访问 (也称直接访问) 向量是动态结构,它的大小不固定,可以在程 序运行时增加或减少。 P334-335 给出了向量的部分接口。 例10-1 p336 – 求范围2~N中的质数,N在程序运行时由键盘 输入。
heap
T vob_1 T vob_2 这块叫 size 这块叫 capacity
T vob_n 预留空间
20
// vector 的例子 #include <vector> #include <iostream> using namespace std; void main() { int temp[3] = {4,5,6}; vector<int> container1(3); vector<int> container2(temp,temp+3); container1[0] = 1; container1[1] = 2; container1[2] = 3;
相关主题