C++ STL中的算法(Algorithms)作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。按照对容器内容的操作可将STL 中的算法大致分为四类:

  (1)只读算法:指不直接修改其所操作的容器内容的算法。
  (2)可变序列算法:指可以修改它们所操作的容器内容的算法。
  (3)排序算法:包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。
  (4)数值算法:对容器内容进行数值上的对比或计算。

本次只针对C++ STL 中常用的算法进行介绍,包括算法的使用场景、具体用法以及算法功能。

(1)只读算法

1)查找算法

find(begin, end, value)

在迭代区间[begin, end)内查找等于value的元素,找到返回对应的迭代器,否则返回end迭代器。

find_first_of(begin, end, begin2, end2)

在迭代区间[begin, end)内查找与区间[begin2, end2)内任意匹配的元素,找到返回第一个指向匹配元素的迭代器,否则返回第一个区间的end迭代器。

find_end(begin, end, begin2, end2)

与find_frist_of类型,区别:返回最后一个指向匹配元素的迭代器。

find_if(begin. end, func)

函数find的带一个函数参数的_if版本,与find功能相同,找等于value的元素。条件:使函数func返回true,否则不执行操作。

2)搜索与统计算法

search(begin, end, begin2, end2)

在迭代区间[begin, end)内查找子序列[begin2, end2),找到返回区间[begin, end)匹配子序列的迭代器,否则返回end迭代器。

search_n(begin, end, n, value)

在迭代区间[begin, end)内查找连续出现n个value的子序列,找到返回区间[begin, end)匹配n个value的迭代器,否则返回end迭代器。

count(begin, end, value)

统计在迭代区间[begin, end)内等于value的元素个数。

lower_bound(begin, end, value)

在迭代区间[begin, end)内查找第一个大于value的元素,找到返回区间[begin, end)第一个大于value的元素的迭代器,否则返回end迭代器。

upper_bound(begin, end, value)

在迭代区间[begin, end)内查找第一个小于value的元素,找到返回区间[begin, end)第一个小于value的元素的迭代器,否则返回end迭代器。

count_if(begin, end, func)

函数count的带一个函数参数的_if版本,与count功能相同,统计在迭代区间[begin, end)内等于value的元素个数。条件:使函数func返回true,否则不执行操作。

(2)可变序列算法

copy(begin, end, begin2)

将迭代区间[begin, end)元素复制到以begin2开始的迭代区间。

transform(begin, end, begin2, func)

功能与copy相同,只是每个元素需要经过函数func的处理。

replace(begin, end, value1, value2)

将迭代区间[begin, end)中等于value1的元素替换为value2.

fill(begin, end, value)

将迭代区间[begin, end)内元素都写入value。

fill_n(begin, n, value)

从位置begin开始的n个元素写入value。

generate(begin, n, rand)

向从begin开始的n个位置随机填写数据。

remove(begin, end)

移除区间[begin, end)内的元素,并不真正删除元素,只是将要删除的元素移动到容器的末尾。

unique(begin, end)

移除区间[begin, end)内的相邻重复的元素,并不真正删除元素,不会改变容器的大小,只是这些元素的顺序改变了,是将无重复的元素复制到序列的前端,从而覆盖相邻的重复元素。unique返回的迭代器指向超出无重复的元素范围末端的下一位置。

remove_if(begin, end, func)

remove的if版本,在函数func返回true的情况下执行remove。

replace_if(begin, end, func, value2)

replace的if版本,在函数func返回true的情况下执行replace。

remove_copy(begin, end, dest)

remove的_copy版本,将反转后的序列输出到从dest开始的迭代区间。

remove_copy_if(begin, end, dest, func)

remove_copy的_if版本,在函数func返回true的情况下执行remove_copy。

replace_copy(begin, end, dest, value1, value2)

replace的_copy版本,将替换后的序列输出到从dest开始的迭代区间。

replace_copy_if(begin, end, dest, func, value2)

repalce_copy的_if版本,在函数func返回true的情况下执行replace_copy。

注意copy,transform,fill_n和generat都需要保证:输出序列有足够的空间。

(3)排序算法

sort(begin, end)

将迭代区间[begin, end)内的元素按字典次序排列。

stable_sort(begin, end, func)

将迭代区间[begin, end)内的元素按字典次序排列,同时保存相等元素之间的顺序关系。

partial_sort(begin, mid, end)

对迭代区间[beg,end]内的mid - beg个元素进行排序,将最小的mid - beg个元素有序放在序列的前mid - beg的位置上。

random_shuffle(begin, end)

将迭代区间[begin, end)内的元素随机排序。

reverse(begin, end)

将迭代区间[begin, end)内的元素反转。

rotate(begin, mid, end)

将区间[begin, mid)和[mid, end)旋转,使mid成为新的起点。

merge(begin, end, begin2, end2, nbegin)

将序列[begin, end)和[begin2, end2)合并到一个新的序列nbegin中,并对其排序。

reverse_copy(begin, end, dest)

reverse的_copy版本,将reverse过后的序列输出到从dest开始的迭代区间。

rotate_copy(begin, mid, end, dest)

rotate的_copy版本,将rotate过后的序列输出到从dest开始的迭代区间。

(4)数值算法

equal(begin, end, begin2, end2)

判断两个区间元素是否相等。

includes(begin, end, begin2, end2)

判断[begin, end)序列是否被第二个序列[begin2, end2)包含。

max_element(begin, end)

返回迭代区间[begin, end)内最大元素的位置。

min_element(begin, end)

返回迭代区间[begin, end)内最小元素的位置。

mismatch(begin, end, begin2, end2)

查找两个序列中第一个不匹配的元素,返回一对迭代器标记第一个不匹配元素的位置。

C++ 标准模板库(STL)——算法(Algorithms)的用法及理解的更多相关文章

  1. C++标准模板库STL算法与自适应容器(栈和队列)

    参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在 ...

  2. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  3. C++ 标准模板库(STL)

    C++ 标准模板库(STL)C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), ...

  4. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

  5. 标准模板库--STL

    标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...

  6. 实验8 标准模板库STL

    一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http:// ...

  7. C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...

  8. 标准模板库(STL)学习探究之stack

    标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string

  9. C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

    摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...

  10. C++ 标准模板库STL 队列 queue 使用方法与应用介绍

    C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...

随机推荐

  1. NGINX缓存使用官方指南

    我们都知道,应用程序和网站一样,其性能关乎生存.但如何使你的应用程序或者网站性能更好,并没有一个明确的答案.代码质量和架构是其中的一个原因,但是在很多例子中我们看到,你可以通过关注一些十分基础的应用内 ...

  2. App自动化测试之Appium环境安装(涉及雷电模拟器和真机)

    1.安装Microsoft .NET Framework 4.5 及以上版本 2.安装Appium 官方网站地址:http://appium.io/ 我装了1.17.0版本 3.安装JDK 1.8及以 ...

  3. OneFlow 并行特色

    OneFlow 并行特色 在 Consistent 与 Mirrored 视角中,已经知道 OneFlow 提供了 mirrored 与 consistent 两种看待分布式系统的视角,并且提前知道了 ...

  4. PointRCNN: 点云的3D目标生成与检测

    PointRCNN: 点云的3D目标生成与检测 PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud 论文地址 ...

  5. python_xlutils : python利用xlutils修改表格内容

    一.xlutils是什么 是一个提供了许多操作修改excel文件方法的库: 属于python的第三方模块 xlrd库用于读取excel文件中的数据,xlwt库用于将数据写入excel文件,修改用xlu ...

  6. 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入

    什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...

  7. Java如何使用while和for嵌套循环控制输出数据,使数据奇偶行不同

    /* 题目1 使用Eclipse编写控制台应用程, 使用while循环在控制台打印10行10列的如下图形 □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ...

  8. 【题解】ball 数论

    题目 题目描述: 众所周知的是Dr.Bai 穷困潦倒负债累累,最近还因邦邦的出现被班上的男孩子们几乎打入冷宫,所以Dr.Bai 决定去打工赚钱. Dr.Bai 决定做玩♂球的工作,工作内容如下. 老板 ...

  9. noip2012 总结

    Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密码.Vigenère 密码的加密解密算法简单易用,且破译 ...

  10. docker2-镜像原理及创建新的镜像

    1,镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 在docker中所有应用 ...