STL——常用算法

#include<algorithm>

遍历算法

for_each

for_each(iterator beg,iterator end,_func); //func为函数对象或者函数

transform

搬运容器到另一个容器中

transform(iterator beg1, iterator end1, iterator beg2, _func);

例如: transform(v.begin(), v.end(), vTarget.begin(), TransForm());

查找算法

find

find(iterator beg,iterator end,value);

//按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器

find_if

按条件查找元素

find_if(iterator beg, iterator end, _Pred);

//_Pred 为函数或者谓词

//返回指定迭代器位置

adjacent_find

查找相邻重复元素

adjacent_find(iterator beg,iterator end);

//查找相邻重复元素,返回相邻元素的第一个位置的迭代器 —— beg开始迭代器,end结束迭代器

binary_search

查找指定元素是否存在,内部使用二分查找,必须针对有序序列,若是自定义类型,需要在类里面重载<或者是定义比较函数

count

统计元素个数,按值统计

count(iterator beg,iterator end,value);

count_if

按条件统计元素个数

count_if(iterator beg, iterator end, _Pred);

//_Pred谓词

排序算法

sort

sort(iterator beg,iterator end,_Pred); //谓词

random_shuffle

洗牌,随机调整次序

random_shuffle(iterator beg,iterator end);

记得调用随机数种子,如果要重复使用的话

srand((unsigned int)time(NULL));

merge

两个容器元素合并,并存储到另一个容器中

merge(iterator beg1,iteratore end1,iterator beg2,iterator end2,iterator dest);

//将容器1和容器2存储到目标容器中

//merge合并两个容器必须是有序的序列

reverse

对容器内元素进行反转

reverse(iterator beg, iterator end);

常见拷贝和替换算法

copy

copy(iterator beg,iterator end,iterator dest);

//注意,copy不会负责处理动态分配内存的分配和释放,即浅拷贝

//同时目标容器得提前开辟空间

replace

将区间内的旧元素替换为新元素

replace(iterator beg,iterator end,oldvalue,newvalue);

//把区间内旧元素替换为新元素

replace_if

将区间内满足条件的元素替换为指定元素

replace_if(iterator beg,iterator end,_pred,newvalue); //_pred谓词

swap

互换两个容器的元素,需要是同种类型的容器。

swap(container c1, container c2);

算数生成算法

包含的头文件为 #include<numeric>

accumulate

计算区间内容器元素累计总和

accumulate(iterator beg,iterator end,value);

//beg开始迭代器,end结束迭代器,value起始值

例如:int total = accumulate(v.begin(), v.end(), 0);

fill

向容器中填充指定元素

fill(iterator beg,iterator end,value); //value为填充的值

常用集合算法

set_intersection

求两个容器的交集——必须是有序序列

set_intersection(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);

dest为目标容器开始迭代器

目标容器开辟空间需从两个容器中取小值

set_union

求两个容器的并集——必须是有序序列

set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);

dest为目标容器开始迭代器

目标容器开辟空间需要为两个容器相加

set_difference

求两个集合的差集

set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

两个集合必须是有序序列

有返回值,为差集中最后一个元素的位置。,方便锁定到有效部分

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Data Structures, Algorithms, and Applications in C++, Second Edition 出版者的话 译者序 前言 第一部分 预备知识 第1章 C++回顾 1.1 引言 1.2 函数与参数 1.2.1 传值参数 1.2.2 模板函数 1.2.3 引用参数 1.2.4 常量引用参数 1.2.5 返回值 1.2.6 重载函数 1.3 异常 1.3.1 抛出异常 1.3.2 处理异常 1.4 动态存储空间分配 1.4.1 操作符new 1.4.2 一维数组 1.4.3 异常处理 1.4.4 操作符delete 1.4.5 二维数组 1.5 自有数据类型 1.5.1 类currency 1.5.2 一种不同的描述方法 1.5.3 操作符重载 1.5.4 友元和保护性类成员 1.5.5 增加#ifndef、#define和#endif语句 1.6 异常类illegalParameterValue 1.7 递归函数 1.7.1 递归的数学函数 1.7.2 归纳 1.7.3 C++递归函数 1.8 标准模板库 1.9 测试与调试 1.9.1 什么是测试 1.9.2 测试数据的设计 1.9.3 调试 1.10 参考及推荐读物 第2章 程序性能分析 2.1 什么是程序性能 2.2 空间复杂度 2.2.1 空间复杂度的组成 2.2.2 举例 2.3 时间复杂度 2.3.1 时间复杂度的组成 2.3.2 操作计数 2.3.3 最好、最坏和平均操作计数 2.3.4 步数 第3章 渐近记法 3.1 引言 3.2 渐近记法 3.2.1 大Ο记法 3.2.2 渐近记法Ω和Θ 3.3 渐近数学(可选) 3.3.1 大O记法 3.3.2 Ω记法 3.3.3 Θ记法 3.3.4 小ο记法 3.3.5 特性 3.4 复杂度分析举例 3.5 实际复杂度 3.6 参考及推荐读物 第4章 性能测量 4.1 引言 4.2 选择实例的大小 4.3 设计测试数据 4.4 实验设计 4.5 高速缓存 4.5.1 简单计算机模型 4.5.2 缓存未命中对运行时间的影响 4.5.3 矩阵乘法 4.6 参考及推荐读物 第二部分 数据结构 第5章 线性表——数组描述 5.1 数据对象和数据结构 5.2 线性表数据结构 5.2.1 抽象数据类型linearList 5.2.2 抽象类linearList 5.3 数组描述 5.3.1 描述 5.3.2 变长一维数组 5.3.3 类arrayList 5.3.4 C++迭代器 5.3.5 arrayList的一个迭代器 5.4 vector的描述 5.5 在一个数组中实现的多重表 5.6 性能测量 5.7 参考及推荐读物 第6章 线性表——链式描述 6.1 单向链表 6.1.1 描述 6.1.2 结构chainNode 6.1.3 类chain 6.1.4 抽象数据类型linearList的扩充 6.1.5 类extendedChain 6.1.6 性能测量 6.2 循环链表和头节点 6.3 双向链表 6.4 链表用到的词汇表 6.5 应用 6.5.1 箱子排序 6.5.2 基数排序 6.5.3 凸包 6.5.4 并查集 第7章 数组和矩阵 7.1 数组 7.1.1 抽象数据类型 7.1.2 C++数组的索引 7.1.3 行主映射和列主映射 7.1.4 用数组的数组来描述 7.1.5 行主描述和列主描述 7.1.6 不规则二维数组 7.2 矩阵 7.2.1 定义和操作 7.2.2 类matrix 7.3 特殊矩阵 7.3.1 定义和应用 7.3.2 对角矩阵 7.3.3 三对角矩阵 7.3.4 三角矩阵 7.3.5 对称矩阵 7.4 稀疏矩阵 7.4.1 基本概念 7.4.2 用单个线性表描述 7.4.3 用多个线性表描述 7.4.4 性能测量 第8章 栈 8.1 定义和应用 8.2 抽象数据类型 8.3 数组描述 8.3.1 作为一个派生类实现 8.3.2 类arrayStack 8.3.3 性能测量 8.4 链表描述 8.4.1 类derivedLinkedStack 8.4.2 类linkedStack 8.4.3 性能测量 8.5 应用 8.5.1 括号匹配 8.5.2 汉诺塔 8.5.3 列车车厢重排 8.5.4 开关盒布线 8.5.5 离线等价类问题 8.5.6 迷宫老鼠 8.6 参考及推荐读物 第9章 队列 9.1 定义和应用 9.2 抽象数据类型 9.3 数组描述 9.3.1 描述 9.3.2 类arrayQueue 9.4 链表描述 9.5 应用 9.5.1 列车车厢重排 9.5.2 电路布线 9.5.3 图元识别 9.5.4 工厂仿真 9.6 参考及推荐读物 第10章
STLStandard Template Library,即标准模板库,是一个具有工业强度的,高效的C++ 程序库。它被容纳于C++ 标准程序库C++ Standard Library中,是ANSI/ISO C++ 标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组; STL另一个重要特性是它不是面向对象的。为了具有足够通用性,STL主要依赖于模板而不是封装,继承和虚函数(多态性)——OOP的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效; 从逻辑层次来看,在STL中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像需求requirements,概念concept,模型model,容器container,算法algorithmn,迭代子iterator等。与OOPobject-oriented programming中的多态polymorphism一样,泛型也是一种软件的复用技术; 从实现层次看,整个STL是以一种类型参数化的方式实现的,这种方式基于一个在早先C++标准中没有出现的语言特性--模板template。
C++ Primer中文版 (第5版)是久负盛名的 C 经典教程,时隔八年之久,终于迎来重大升级。除令全球无数程序员从中受益,甚至为之迷醉的——C 大师 Stanley B. Lippman 的丰富实践经验,C 标准委员会原负责人 Josée Lajoie 对C 标准的深入理解,以及C 先驱 Barbara E. Moo 在 C 教学方面的真知灼见外,更是基于全新的 C 11标准进行了全面而彻底的内容更新。非常难能可贵的是,《C Primer 中文版(第5版)》所有示例均全部采用 C 11 标准改写,这在经典升级版中极其罕见——充分体现了 C 语言的重大进展及其全面实践 《泛型编程与STL》侯捷 著 阐述了泛型编程的中心思想:concepts、modeling、refinement,并为你展示这些思想如何导出STL的基础概念:iterators、containers、functionobjects.循此路线,你可以把STL想像为一个由concepts组成的程序库。你将学习真正式结构并因此获得其潜在威力所带来的完整优势。 OpenCV在计算机视觉领域扮演着重要的角色。作为一个基于开源发行的跨平台计算机视觉库,OpenCV实现了图像处理和计算机视觉方面的很多通用算法。本书以当前最新版本的OpenCV最常用最核心的组件模块为索引,深入浅出地介绍了OpenCV2和OpenCV3中的强大功能、性能,以及新特性。书本配套的OpenCV2和OpenCV3双版本的示例代码包中,含有总计两百多个详细注释的程序源代码与思路说明。读者可以按图索骥,按技术方向进行快速上手和深入学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值