C++ STL Algorithm库的简易使用指南

注:代码中使用部分表示方式为伪代码,应根据实际调整

容器运算

std::copy

将一个容器的某段复制到另一个容器后面

// Copy a container to the end of another container.
std::copy(a.begin(), a.end(), std::back_inserter(b)); // range
std::copy_n(a.begin(), n, b.begin());

std::fill

把一个容器中的指定区域填充为某个值

std::fill(a.iter_begin(), a.end_iter(), val); // fill range
std::fill_n(a.iter_begin(), n, val)

std::generate

在指定区间根据函数生成值

int i = 0;
std::generate(a.begin(), a.end(), [](){return i++});
std::generate_n(a.begin(), n, [](){return i++});

std::merge

把两个容器的数据连接,放置到第三个容器中

std::merge(a.begin(), a.end(), b.begin(), b.end(), c.begin())

std::move

把指定区间的数据移动到另一区间

std::move(a.begin(), a.end(), b.begin());

std::reverse

调换区间顺序

std::reverse(a.begin(), a.end())

std::transform

Unary operation: 对一个容器元素做运算,将结果存储到指定容器中(可以是该容器,也可以是另一个容器)

std::transform(a.begin(), a.end(), b.begin(), f(&a))

对两个容器元素做运算,将结果存到指定容器中(可以是两个中的一个,也可以是第三个)

std::transform(a.begin(), a.end(), b.begin(), c.begin(), f(&a, &b))
std::transform(a.begin(), a.end(), b.begin(), a.begin(), f(&a, &b));
std::transform(a.begin(), a.end(), b.begin(), b.begin(), f(&a, &b));

std::replace

用一个新值替换一段区域中的旧值

std::replace(a.begin(), a.end(), old_value, new_value)

std::remove

把序列中的某一个元素去除

std::remove(a.begin(), a.end(), value)

std::swap

把两个容器的内容交换,也可用一个空白容器清空另一个容器

std::swap(a, b)
std::swap(a, {})
std::iter_swap(a.iter(), b.iter()); // 交换指定元素

索引与查询

std::distance

计算两个迭代器之间的距离

std::distance(a.iter1(), a.iter2())

std::lower_bound/std::upper_bound

返回第一个大于等于/大于给定值的迭代器

auto iter = std::lower_bound(data.begin(), data.end(), val)
auto iter = std::upper_bound(data.begin(), data.end(), val)
OpenSAL1.1 包含了算法导论中所有数据结构和算法以及其他内容,本资源为该算法的静态链接 内容如下(*号表示1.1版本新增内容): 数据结构:一般堆、二项堆、斐波那契堆、红黑树、通用散列(采用全域散列和完全散列技术)、不相交集合、任意维数组、高维对称数组。 图论算法(兼容有向图,无向图):广度和深度优先遍历、确定图是否存在回路、拓扑排序、强连通分支、欧拉环(欧拉路径)、最小生成树(Kruskal、Prim)、单源最短路径(3种)、每对顶点间最短路径(2种)、最大流(2种)等等。 代数算法:霍纳法则计算多项式和、矩阵乘法(2种)、方阵的LUP分解、解线性方程组(2种)、矩阵求逆(2种)、求伪逆矩阵(2种)、解正态方程组(2种)、最小二乘估计(2种)、多元最小二乘估计*、快速傅里叶变换、快速傅里叶逆变换、多维快速傅里叶变换、多维快速傅里叶逆变换、快速向量求卷积(单变量多项式乘积)、快速张量求卷积(多变量多项式乘积)、多项式除法*、快速方幂和算法。 序列算法:最长公共子序列、KMP序列匹配*、键值分离排序。 数论算法:大数类(兼容浮点数、整数、与内置类型兼容运算)*、RSA加解密系统*、解同余方程*、孙子定理解同余方程组*、Miller_Rabin素数测试(产生大质数)*、随机数(实数、大数)*、欧几里得算法*。 计算几何算法:确定任意一对线段是否相交*、凸包*、最近点对*。 运筹学:线性规划(单纯形法)*、分配问题*、最优二度子图*、多01背包问题*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值