C++语言程序设计 第十章C+标准模板库
第十章 C++标准模板库 C++语言程序设计
C++语言程序设计 主要内容 泛型程序设计 ●与标准模板库有关的概念和术语 ●C++标准模板库中的容器 迭代器 标准C++库中的算法
C++语言程序设计 2 主要内容 ⚫ 泛型程序设计 ⚫ 与标准模板库有关的概念和术语 ⚫ C++标准模板库中的容器 ⚫ 迭代器 ⚫ 标准C++库中的算法
C++语言程序设计 乏型程序设计 将程序写得尽可能通用。 将算法从特定的数据结构中抽象出来,成为通 用的。 ●C++的模板为泛型程序设计奠定了关键的基础。 ●STL是泛型程序设计的一个范例。STL的四个 组件: 容器( container)类模板 迭代器( iterator)类模板 算法( algorithms)函数模板 函数对象( function object类模板
C++语言程序设计 3 泛型程序设计 ⚫ 将程序写得尽可能通用 。 ⚫ 将算法从特定的数据结构中抽象出来,成为通 用的。 ⚫ C++的模板为泛型程序设计奠定了关键的基础。 ⚫ STL是泛型程序设计的一个范例 。STL的四个 组件: – 容器(container) 类模板 – 迭代器(iterator) 类模板 – 算法(algorithms)函数模板 – 函数对象(function object)类模板
C++语言程序设计 命名空间( Namespace) 概 个命名空间将不同的标识符集合在一个 命名作用域( named scope)内 念和术 为了解决命名冲突 例如,声明一个命名空间NS: namespace Ns t class File void Fun ( 语 则引用标识符的方式如下 NS: File obj; NS∷Fun0; 没有声明命名空间的标识符都处于无名斗 命名空间中
C++语言程序设计 4 命名空间(Namespace) ⚫ 一个命名空间将不同的标识符集合在一个 命名作用域(named scope)内 – 为了解决命名冲突 – 例如,声明一个命名空间NS: namspace NS { class File; void Fun (); } 则引用标识符的方式如下, NS:: File obj; NS:: Fun (); ⚫ 没有声明命名空间的标识符都处于无名的 命名空间中 概 念 和 术 语
C++语言程序设计 命名空间( Namespace) ●可以用 usIng来指定命名空间 概念和术 例如,经过以下声明: using NS. File, 在当前作用域中就可以直接引用File using namespace std 语 命名空间std中所有标识符都可直接引用 在新的C++标准程序库中,所有标识 符都声明在命名空间st中,头文件 都不使用扩展名
C++语言程序设计 5 命名空间(Namespace) ⚫ 可以用using来指定命名空间 – 例如,经过以下声明: using NS::File; 在当前作用域中就可以直接引用File – using namespace std; 命名空间std中所有标识符都可直接引用 ⚫ 在新的C++标准程序库中,所有标识 符都声明在命名空间std中,头文件 都不使用扩展名 概 念 和 术 语
C++语言程序设计 容器 概容器类是容纳、包含一组元素或元素 集合的对象。 念和术 °异类容器类与同类容器类 顺序容器与关联容器 语 七种基本容器: 向量( vector)、双端队列( deque) 列表(ist)、集合(set)、多重集合 ( multiset)、映射(map)和多重映射 (multimap
C++语言程序设计 6 容器 ⚫ 容器类是容纳、包含一组元素或元素 集合的对象。 ⚫ 异类容器类与同类容器类 ⚫ 顺序容器与关联容器 ⚫ 七种基本容器: – 向量(vector)、双端队列(deque)、 列表(list)、集合(set)、多重集合 (multiset)、映射(map)和多重映射 (multimap) 概 念 和 术 语
C++语言程序设计 迭代器 迭代器是面向对象版本的指针,它 概们棍供了访问容器、序列中每个元素的 念 和方法 术 理解迭代器是理解STL的关键。模 语板可以使算法独立于数据类型,迭代器 使算法独立于容器类型
C++语言程序设计 8 迭代器 迭代器是面向对象版本的指针,它 们提供了访问容器、序列中每个元素的 方法。 理解迭代器是理解STL的关键。模 板可以使算法独立于数据类型,迭代器 使算法独立于容器类型。 概 念 和 术 语
C++语言程序设计 算法 概C+标准模板库中包括70多个算法 念和 其中包括查找算法,排序算法,消除算 法,记数算法,比较算法,变换算法, 置换算法和容器管理等等 术 语这些算法的一个最重要的特性就是它 们的统一性,并且可以广泛用于不同 的对象和内置的数据类型
C++语言程序设计 9 算法 ⚫ C++标准模板库中包括70多个算法 – 其中包括查找算法,排序算法,消除算 法,记数算法,比较算法,变换算法, 置换算法和容器管理等等。 ⚫ 这些算法的一个最重要的特性就是它 们的统一性,并且可以广泛用于不同 的对象和内置的数据类型。 概 念 和 术 语
C++语言程序设计 表10-1所有容器都通用的成员函数 ct,ct和ct2是同类型的容器。 成员函数 作用 默认构造函数初始化对象为空 带参数的构造函数除了默认的构造函数,每一个容器都有带参数的构造函数 拷贝构造函数在发生下列情况之一时执行:当一个对象作为参数进行值 传递时;当用另一个同类型的对象来声明和初始化对象时 当一个函数的返值是一个对象时 析构函数 当对象退出作用域时执行 ct. empty 如果容器是空,返回true,否则返回 false ct.size 以无符号整型数返回容器ct中的元素数目 ct. max size)以无符号整型数返回容器t中可插入的元素数目 ct swap(c1,c2)交换容器c1和c2中的元素 ct. begin 返回容器中第一个元素的迭代器的值 ct. endo 返回容器中最后一个元素的迭代器的值
C++语言程序设计 10 成员函数 作 用 默认构造函数 初始化对象为空 带参数的构造函数 除了默认的构造函数,每一个容器都有带参数的构造函数。 拷贝构造函数 在发生下列情况之一时执行:当一个对象作为参数进行值 传递时;当用另一个同类型的对象来声明和初始化对象时; 当一个函数的返值是一个对象时 析构函数 当对象退出作用域时执行 ct.empty() 如果容器是空,返回true,否则返回false ct.size() 以无符号整型数返回容器ct中的元素数目 ct.max_size() 以无符号整型数返回容器ct中可插入的元素数目 ct.swap(c1,c2) 交换容器cl和c2中的元素 ct.begin() 返回容器中第一个元素的迭代器的值 ct.end() 返回容器中最后一个元素的迭代器的值 表10-1所有容器都通用的成员函数 ct,ct1和ct2是同类型的容器
C++语言程序设计 ct. rbegino 反向开始。返回指向容器ct中的最后一个元素 的指针 ct. rendo 反向结東。返回指向容器ct中第一个元素的指 针 ct. insert( position,elem)在容器ct中由变量 position(迭代器)指定的 位置处插入elem ct erase(begin, end) 删除所有从 begin到end的所有元素 ct. clear 删除容器中的所有元素。在调用了该函数之后 容器ct为空 运算符函数 ctl=ct2 把ct2的元素复制到ct1。在执行该操作后,两 个容器中的元素相同 ctl==ct2 如果容器ct1和ct2相等,返回true否则,返 回 false ctl=ct2 如果容器ct1和ct2不相等,返回true。否则, 返回 false
C++语言程序设计 11 ct.rbegin() 反向开始。返回指向容器ct中的最后一个元素 的指针 ct.rend() 反向结束。返回指向容器ct中第一个元素的指 针 ct.insert(position,elem) 在容器ct中由变量position(迭代器)指定的 位置处插入elem ct.erase(begin,end) 删除所有从begin到end的所有元素 ct.clear() 删除容器中的所有元素。在调用了该函数之后, 容器ct为空 运算符函数 ct1=ct2 把ct2的元素复制到ctl。在执行该操作后,两 个容器中的元素相同 ctl==ct2 如果容器ctl和ct2相等,返回true。否则,返 回false ct1!=ct2 如果容器ctl和ct2不相等,返回true。否则, 返回false