从零开始学C++之STL(四):算法简介、7种算法分类

一、算法

算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。

算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。

算法的优势在于只需实作一份,可以适应所有的容器,不必为每一种容器量订制。也可以与用户定义的容器搭配。

算法尾词:

_if

比如find(按某个值来查找),find_if(按某个条件来查找)

_copy

这个尾词用来表示在算法中,元素不光被操作,还会被复制到目标区间。比如reverse、reverse_copy

二、算法分类

1、非变动性算法既不改变元素次序,也不改变元素值。

2、变动性算法,要么直接改变元素值,要么就是在复制到另一个区间的过程中改变元素值。如果是第二种情况,原区间不会发生变化

3、移除性算法是一种特殊的变动性算法。移除性算法是在一区间内移除某些元素,这些算法并不能改变元素的数量,它们只是以逻辑上的思考,将原本置于后面的“不需要移除元素”向前移动,覆盖那些被移除元素而已。它们都返回新区间的逻辑终点。移除性算法也可以在复制的过程中执行移除。注意,目标区间不能是关联式容器。

4、变序性算法改变元素次序,但不改变元素值。这些算法不能用于关联式容器,因为关联式容器中,元素有固定的次序。

5、排序算法,排序算法是一种特殊的变序算法。但比一般的变序性算法更复杂,花费更多的时间

6、已序区间算法,一般来说这些算法的结果,仍然是已序的。

7、用来处理数值的算法,需要加上头文件 #include<numeric>

在后面的文章中将对7种算法分别举一些例子来示例。

参考:

C++ primer 第四版 Effective C++ 3rd C++编程规范

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏https://www.cnblogs.com/L

Pandas库的使用--Series

742
来自专栏C/C++基础

C++模板特化与偏特化

模板特化(template specialization)不同于模板的实例化,模板参数在某种特定类型下的具体实现称为模板的特化。模板特化有时也称之为模板的具体化...

1154
来自专栏Android相关

二叉查找树(Binary Search Tree)

在二叉搜索树b中查找x的过程为: 若b是空树,则搜索失败,否则: 若x等于b的根节点的数据域之值,则查找成功;否则: 若x小于b的根节点的数据域之值,则搜...

1613
来自专栏Hongten

算法与数据结构(一)

  用计算机实现问题求解,实质上就是在计算机中建立一个解决问题的模型。用来表示问题或处理问题的模型可以有不同的抽象形式:

712
来自专栏xingoo, 一个梦想做发明家的程序员

快速排序

算法思想:对于输入的子数组a[p:r],按下面三个步骤: 1 分解:以a[p]为基准元素将a[p:r]分成三段,a[p:q-1],a[q],a[q+1:r],使...

1939
来自专栏前端儿

ASCII码排序

输入第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。输出对于每组输入数据,输出一行,字符中间...

882
来自专栏赵俊的Java专栏

寻找旋转排序数组中的最小值

1375
来自专栏有趣的Python

6-玩转数据结构-二分搜索树

电脑中的文件夹就是一种树结构,计算机中让人们使用的存储结构来源于生活。图书馆分区,分类,分子类。

2282
来自专栏章鱼的慢慢技术路

LeetCode_1. Two Sum_Solution

这道题目的意思是给定一个数组和一个值,要求出这个数组中两个值的和等于这个给定值target。

1033
来自专栏xingoo, 一个梦想做发明家的程序员

剑指OFFER之二叉树中和为某一值的路径(九度OJ1368)

题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 输入:...

1837

扫码关注云+社区