OSDN Git Service

Enrich algorithms
authorJacob Zhong <cmpute@qq.com>
Wed, 4 Sep 2019 21:50:16 +0000 (17:50 -0400)
committerJacob Zhong <cmpute@qq.com>
Wed, 4 Sep 2019 21:50:16 +0000 (17:50 -0400)
docs/lang/csl/algorithm.md
docs/lang/csl/index.md

index 2aa51b7..25512af 100644 (file)
@@ -1,9 +1,17 @@
-STL 提供了大约 100 个实现算法的模版函数,基本都包含在 `<algorithm>` 之中,还有一部分包含在 `<numeric>` 和 `<functional>` 。
+STL 提供了大约 100 个实现算法的模版函数,基本都包含在 `<algorithm>` 之中,还有一部分包含在 `<numeric>` 和 `<functional>` 。完备的函数列表请[参见参考手册](https://zh.cppreference.com/w/cpp/algorithm)
 
-常用函数:
+## 普通操作
 
--    `sort` :排序。 `sort(v.begin(), v.end(), cmp)` 或 `sort(a + begin, a + end, cmp)` ,其中 `end` 是排序的数组最后一个元素的后一位, `cmp` 为自定义的比较函数。
+-    `find`  :顺序查找。`find(v.begin(), v.end(), value)` ,其中 `value` 为需要查找的值。
+-    `find_end`  :逆序查找。`find_end(v.begin(), v.end(), value)` 。
 -    `reverse` :翻转数组、字符串。 `reverse(v.begin(), v.end())` 或 `reverse(a + begin, a + end)` 。
--    `unique` : 去除容器中相邻的重复元素。`unique(v.begin(), v.end())` 或 `unique(a + begin, a + end)` 。与 `sort` 结合使用可以实现完整容器去重。
--    `nth_element` :按指定范围进行分类,即找出序列中第 $n$ 大的元素,使其左边均为小于它的数,右边均为大于它的数。 `nth_element(v.begin(), v.begin() + mid, v.end(), cmp)` 或 `nth_element(a + begin, a + begin + mid, a + end, cmp)` 。复杂度 $O(n)$ 。
+-    `unique` :去除容器中相邻的重复元素。`unique(v.begin(), v.end())` 或 `unique(a + begin, a + end)` 。与 `sort` 结合使用可以实现完整容器去重。
 -    `random_shuffle` :随机地打乱数组。 `random_shuffle(v.begin(), v.end())` 或 `random_shuffle(v + begin, v + end)` 。
+
+## 排序相关
+
+-    `sort` :排序。 `sort(v.begin(), v.end(), cmp)` 或 `sort(a + begin, a + end, cmp)` ,其中 `end` 是排序的数组最后一个元素的后一位, `cmp` 为自定义的比较函数。
+-    `stable_sort` :稳定排序, 用法同 `sort()`
+-    `nth_element` :按指定范围进行分类,即找出序列中第 $n$ 大的元素,使其左边均为小于它的数,右边均为大于它的数。 `nth_element(v.begin(), v.begin() + mid, v.end(), cmp)` 或 `nth_element(a + begin, a + begin + mid, a + end, cmp)` 。复杂度 $O(n)$ 。
+-    `binary_search` :二分查找。`binary_search(v.begin(), v.end(), value)` ,其中 `value` 为需要查找的值。
+-    `merge` :将两个(已排序的)序列合并。`merge(v1.begin(), v1.end(), v2.begin(), v2.end())` 。
index de76153..55fb0ab 100644 (file)
@@ -16,7 +16,7 @@ STL 即标准模板库(Standard Template Library),是 C++ 标准库的一
 
 ## Boost 库
 
-[Boost](https://www.boost.org/) 是除了标准库外,另一个可移植的、高质量、高性能、高可靠性的 C++ 工具库。Boost 中的模块数量非常之大,并且拥有完备的跨平台支持,因此被看作 C++ 的准标准库。C++ 标准中的不少特性也都来自于 Boost,如智能指针、元编程、日期和时间等。尽管在 OI 中无法使用 Boost ,但是 Boost 中有不少轮子可以用来验证算法或者对拍,如 Boost.Geometry 有 R 树的实现, Boost.Graph 有图的相关算法。
+[Boost](https://www.boost.org/) 是除了标准库外,另一个可移植的、高质量、高性能、高可靠性的 C++ 工具库。Boost 中的模块数量非常之大,并且拥有完备的跨平台支持,因此被看作 C++ 的准标准库。C++ 标准中的不少特性也都来自于 Boost,如智能指针、元编程、日期和时间等。尽管在 OI 中无法使用 Boost ,但是 Boost 中有不少轮子可以用来验证算法或者对拍,如 Boost.Geometry 有 R 树的实现, Boost.Graph 有图的相关算法, Boost.Intrusive 则提供了一套与 STL 容器用法相似的侵入式容器
 
 ## 参考资料