第10章泛型程序设计与标准模板库精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
rettruarnnsfxo*rxm; (istream_iterator<double> } (cin),istream_iterator<double>(),ostream_iterator<d
ouble>(cout," "),square); cout<<endl; return 0;
}
#include <vector> #include <iostream> #include <string> using namespace std; int main() { vector<string> vec;
6
迭代器是面向对象版本的指针,它 们提供了访问容器、序列中每个元素的 方法。
使用独立于STL容器的迭代器,需 要包含头文件<iterator>。
7
函数对象是一个行为类似函数的对象,对它 可以像调用函数一样调用。 任何普通函数和重载了”()”运算符的类的对 象都可以作为函数对象来使用,函数对象是泛 化的函数。 使用STL 的函数对象,需要包含头文件 <functional>
▪ 输出流迭代器用来向一个输出流中连续输出 某种类型的数据,它也是一个类模板。
template <class T>ostream_iterator<T>
14
//10_2.cpp #include <iostream> #include <vector> #include <iterator> #include <algorithm> #include <functional> usinintgmnaaimn(e)space std; //求{ 平方的函数 do//u从b标le s准qu输ar入e(读do入ub若le干x)个实数,分别将它们的平方输 {出
3
▪ STL(Standard Template Library)是一个 用于支持C++泛型编程的模板库,1994年被纳 入了C++标准。
▪ STL提供了一些常用的数据结构和算法。如 vector就是STL提供的一个容器。一些常用的 排序、查找等算法在STL中都有现成的模板。
▪ STL的更大意义在于为泛型程序设计提供了逻 辑基础。STL是一个开放的体系。
1、泛型程序设计和STL的结构 2、迭代器 3、容器 4、函数对象 5、算法 6、综合实例
▪ 将程序写得尽可能通用 ▪ 将算法从特定的数据结构中抽象出来,成
为通用的 ▪ C++的模板为泛型程序设计奠定了关键的基
础 ▪ STL是泛型程序设计的一个范例
➢ 容器(container) ➢ 迭代器(iterator) ➢ 算法(algorithms) ➢ 函数对象(function object)
int {
main() const
int
N=5;从标准3输、入函读数入对向象量(fu源自文库nc器tio的n内ob容ject)
vector<int>s(N); 4、算法(algorithm)
for(in输t i=出0向;i<量N;容i+器+)中每个元素的相反数
cin>>s[i];
transform(s.begin(),s.end(),ostream_iterator<i
cout<<(*i)<<endl; return 0; }
图10-2 5个迭代器概念之间的关系
8
▪ C++标准模板库中包括70多个算法
➢ 其中包括查找算法,排序算法,消除算法 ,记数算法,比较算法,变换算法,置换 算法和容器管理等等。
▪ 这些算法的一个最重要的特性就是它们 的统一性,并且可以广泛用于不同的对 象和内置的数据类型。
▪ 使用STL的算法,需要包含头文件 <algorithm>。
12
#include <iostream> #include <iterator> #include <string> using namespace std;
int main() {
istream_iterator<int> a(cin); while(*a!=EOF) {
cout<<*a<<"b"<<endl; a++; } return 0; }
nt>(cout," "),negate<int>());
cout<<endl;
return 0;
}
▪ 容器类是容纳、包含一组元素或元素 集合的对象。
▪ 异类容器类与同类容器类 ▪ 顺序容器与关联容器 ▪ 七种基本容器:
➢ 向量(vector)、双端队列(deque) 、列表(list)、集合(set)、多重集 合(multiset)、映射(map)和多重映 射(multimap)
▪ 简单点,可以把迭代器理解为一种泛化的指 针。它比指针的功能更强大。
11
▪ STL将输入流(如cin)也看做是一个容器。因此 ,可以定义输入流迭代器以便从输入流这个容 器中连续地输入某种类型的数据,送到相应的 地方。
▪ template <class T> istream_iterator<T>
vector<string>::const_iterator i; vec.push_back ("dog"); vec.push_back("bird"); vec.push_back("girl"); vec.push_back("boy"); vec.push_back("Hello,there"); for(i=vec.begin();i!=vec.end();++i)
4
#include <iostream>
#include <vector>
#include <iterator>
STL的4种基本组件
#include <algorithm> #include <functional>
1、容器(container)
using namespace std; 2、迭代器(iterator)
9
容器 (container)
迭代器
算法 (algorithm)
迭代器
容器 (container)
函数对象 (function object)
图10-1 STL组件之间的关系
10
▪ 迭代器是算法和容器的“中间人”。通过迭 代器可以把容器中的数据送到算法中,也可 以把算法对这些数据处理的结果送到相应的 容器中。
ouble>(cout," "),square); cout<<endl; return 0;
}
#include <vector> #include <iostream> #include <string> using namespace std; int main() { vector<string> vec;
6
迭代器是面向对象版本的指针,它 们提供了访问容器、序列中每个元素的 方法。
使用独立于STL容器的迭代器,需 要包含头文件<iterator>。
7
函数对象是一个行为类似函数的对象,对它 可以像调用函数一样调用。 任何普通函数和重载了”()”运算符的类的对 象都可以作为函数对象来使用,函数对象是泛 化的函数。 使用STL 的函数对象,需要包含头文件 <functional>
▪ 输出流迭代器用来向一个输出流中连续输出 某种类型的数据,它也是一个类模板。
template <class T>ostream_iterator<T>
14
//10_2.cpp #include <iostream> #include <vector> #include <iterator> #include <algorithm> #include <functional> usinintgmnaaimn(e)space std; //求{ 平方的函数 do//u从b标le s准qu输ar入e(读do入ub若le干x)个实数,分别将它们的平方输 {出
3
▪ STL(Standard Template Library)是一个 用于支持C++泛型编程的模板库,1994年被纳 入了C++标准。
▪ STL提供了一些常用的数据结构和算法。如 vector就是STL提供的一个容器。一些常用的 排序、查找等算法在STL中都有现成的模板。
▪ STL的更大意义在于为泛型程序设计提供了逻 辑基础。STL是一个开放的体系。
1、泛型程序设计和STL的结构 2、迭代器 3、容器 4、函数对象 5、算法 6、综合实例
▪ 将程序写得尽可能通用 ▪ 将算法从特定的数据结构中抽象出来,成
为通用的 ▪ C++的模板为泛型程序设计奠定了关键的基
础 ▪ STL是泛型程序设计的一个范例
➢ 容器(container) ➢ 迭代器(iterator) ➢ 算法(algorithms) ➢ 函数对象(function object)
int {
main() const
int
N=5;从标准3输、入函读数入对向象量(fu源自文库nc器tio的n内ob容ject)
vector<int>s(N); 4、算法(algorithm)
for(in输t i=出0向;i<量N;容i+器+)中每个元素的相反数
cin>>s[i];
transform(s.begin(),s.end(),ostream_iterator<i
cout<<(*i)<<endl; return 0; }
图10-2 5个迭代器概念之间的关系
8
▪ C++标准模板库中包括70多个算法
➢ 其中包括查找算法,排序算法,消除算法 ,记数算法,比较算法,变换算法,置换 算法和容器管理等等。
▪ 这些算法的一个最重要的特性就是它们 的统一性,并且可以广泛用于不同的对 象和内置的数据类型。
▪ 使用STL的算法,需要包含头文件 <algorithm>。
12
#include <iostream> #include <iterator> #include <string> using namespace std;
int main() {
istream_iterator<int> a(cin); while(*a!=EOF) {
cout<<*a<<"b"<<endl; a++; } return 0; }
nt>(cout," "),negate<int>());
cout<<endl;
return 0;
}
▪ 容器类是容纳、包含一组元素或元素 集合的对象。
▪ 异类容器类与同类容器类 ▪ 顺序容器与关联容器 ▪ 七种基本容器:
➢ 向量(vector)、双端队列(deque) 、列表(list)、集合(set)、多重集 合(multiset)、映射(map)和多重映 射(multimap)
▪ 简单点,可以把迭代器理解为一种泛化的指 针。它比指针的功能更强大。
11
▪ STL将输入流(如cin)也看做是一个容器。因此 ,可以定义输入流迭代器以便从输入流这个容 器中连续地输入某种类型的数据,送到相应的 地方。
▪ template <class T> istream_iterator<T>
vector<string>::const_iterator i; vec.push_back ("dog"); vec.push_back("bird"); vec.push_back("girl"); vec.push_back("boy"); vec.push_back("Hello,there"); for(i=vec.begin();i!=vec.end();++i)
4
#include <iostream>
#include <vector>
#include <iterator>
STL的4种基本组件
#include <algorithm> #include <functional>
1、容器(container)
using namespace std; 2、迭代器(iterator)
9
容器 (container)
迭代器
算法 (algorithm)
迭代器
容器 (container)
函数对象 (function object)
图10-1 STL组件之间的关系
10
▪ 迭代器是算法和容器的“中间人”。通过迭 代器可以把容器中的数据送到算法中,也可 以把算法对这些数据处理的结果送到相应的 容器中。