Part10 泛型程序设计与C++标准模板库 10.7算法

STL算法本身是一种函数模版
  通过迭代器获得输入数据
  通过函数对象对数据进行处理
  通过迭代器将结果输出
STL算法是通用的,独立于具体的数据类型、容器类型

STL算法分类
  不可变序列算法
  可变序列算法
  排序和搜索算法
  数值算法

不可变序列算法
  不直接修改所操作的容器内容的算法
  用于查找指定元素、比较两个序列是否相等、对元素进行计数等
例:
  template<class InputIterator, class UnaryPredicate>
  InputIterator find_if(InputIterator first, InputIterator last, UnaryPredicate pred);
  查找[first, last)区间内pred(x)为真的首个元素

可变序列算法
  可以修改它们所操作的容器对象
  包括对序列进行复制、删除、替换、倒序、旋转、交换、分割、去重、填充、洗牌的算法及生成一个序列的算法
例:
  template<class ForwardIterator, class T>
  InputIterator find_if(ForwardIterator first, ForwardIterator last, const T& x);
  将[first, last)区间内的元素全部改写为x。

排序和搜索算法
  对序列进行排序
  对两有序序列进行合并
  对有序序列进行搜索
  有序序列的集合操作
  堆算法
例:
  template <class RandomAccessIterator , class UnaryPredicate>
  void sort(RandomAccessIterator first, RandomAccessIterator last, UnaryPredicate comp);
  以函数对象comp为“<”,对 [first, last)区间内的数据进行排序

数值算法
  求序列中元素的“和”、部分“和”、相邻元素的“差”或两序列的内积
  求“和”的“+”、求“差”的“-”以及求内积的“+”和“·”都可由函数对象指定
例:
  template<class InputIterator, class OutputIterator, class BinaryFunction>
  OutputIterator partial_sum(InputIterator first, InputIterator last, OutputIterator result, BinaryFunction op);
  对[first, last)内的元素求部分“和”(所谓部分“和”,是一个长度与输入序列相同的序列,其第n项为输入序列前n个元素的“和”),以函数对象op为“+”运算符,结果通过result输出,返回的迭代器指向输出序列最后一个元素的下一个元素

原文地址:https://www.cnblogs.com/leosirius/p/8221203.html

时间: 2024-11-10 12:51:27

Part10 泛型程序设计与C++标准模板库 10.7算法的相关文章

Part10 泛型程序设计与C++标准模板库 10.1泛型程序设计及STL的结构

1泛型程序设计的基本概念泛型程序设计: 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念用来界定具备一定功能的数据类型.例如: 将"可以比大小的所有数据类型(有比较运算符)"这一概念记为Comparable 将"具有公有的复制构造函数并可以用'='赋值的数据类型"这一概念记为Assignable 将"可以比大小.具有公有的复制构造函数并可以用'='赋值的所有数据类型&quo

8、泛型程序设计与c++标准模板库5.函数对象

1.函数对象 函数对象是STL提供的第四类主要组件,它使得STL的应用更加灵活方便,从而增强了算法的通用性.大多数STL算法可以用一个函数对象作为参数.所谓"函数对象"其实就是一个行为类似函数的对象,它可以不需要参数,也可以带有若干参数,其功能是获取一个值,或者改变操作的状态. 在c++程序设计中,任何普通的函数和任何重载了调用运算符operator()的类的对象都满足函数对象的特征,因此都可以作为函数对象传递给算法作为参数使用. 以数值算法accumulate()为例子,介绍函数对象

8、泛型程序设计与c++标准模板库2.3双端队列容器

双端队列容器是一种放松了访问权限的队列.除了从队列的首部和尾部访问元素外,标准的双端队列也支持通过使用下标操作符"[]"进行直接访问. 它提供了直接访问和顺序访问方法.其头文件为<deque>. 1)双端队列容器的构造函数 有4中形式的构造函数: deque();//构造size()为0的双端队列容器 deque(size_type n,const T& v=T());//初始化大小为n的双端队列,第二个参数是每个元素的初始值,默认为T()构造的对象 deque(c

8、泛型程序设计与c++标准模板库2.4列表容器

列表容器主要用于存放链表,其中的链表是双向链表,可以从任意一端开始遍历.列表容器是需要按顺序访问的容器.另外,列表容器不支持随机访问迭代器,因此某些算法不能适合于列表容器.列表容器还提供了另一种操作---拼接(splicing),其作用是将一个序列中的元素插入到另一个序列中.其头文件为<list> 1.列表容器的构造函数 4种形式的构造函数: list();//构造size()为0的列表容器 list(sizt_type n,const T& v=T());//初始化一个大小为n的列表

C++标准模板库Stand Template Library(STL)简介与STL string类

参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进行过学习和总结,但并没有一个宏观上的把握,现在通过上一篇和这一篇博文,将对C++模板以及基于C++模板的STL关联起来,形成一个总体的把握,对于掌握C++中模板(template)这一强有力的工具会十分有帮助.本文的主要内容有: (1) STL容器: (2) STL迭代器: (3) STL算法: (4) ST

PKU C++程序设计实习 学习笔记6 标准模板库STL

标准模板库STL 8.1 STL概述 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用:1.面向对象的思想:继承和多态,标准类库  2.泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库 STL 简单地说就是使用模板的程序设计法. 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法. 标准模

八、C++ 标准模板库-STL概述

C++ 标准模板库-STL概述 一.基本概念 1.1 泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用,重用在两个方面有体现: 面向对象的思想:继承和多态,标准类库 泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库 STL 简单地说就是使用模板的程序设计法.将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法. 标准模板库

标准模板库--STL

标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库STL 简单地说就是使用模板的程序设计法. 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法.标准模板库 (Standard

C++ 标准模板库介绍(STL)

1. STL 基本介绍 C++ STL(标准模板库)是惠普实验室开发的一系列软件的统称,是一套功能强大的 C++ 模板类.STL的目的是为了标准化组件,这样就不用重新开发,让后来者可以使用现成的组件,和开源组件有点殊途同归. STL的版本很多,常见的有HP STL.PJ STL. SGI STL等,另外,STL库属于C++标准库的一部分,两者是包含关系. 由于我平时的编程环境主要在Linux系统下,所以在后面总结中,我会主以GNU ISO C++ Library中的STL源码(5.2.1版本)为