C++ 算法库:排序、查找、合并、删除等操作
C++ 标准库中的 'algorithm' 库是一个头文件,包含了一系列用于各种常见算法操作的函数,如排序、查找、合并、删除、替换等。这些函数都是使用模板实现的,可以适用于不同类型的数据结构。
'algorithm' 库中包含的函数有:
- 排序函数:'sort'、'stable_sort'、'partial_sort'、'nth_element' 等。
- 查找函数:'find'、'find_if'、'binary_search'、'lower_bound'、'upper_bound' 等。
- 数值函数:'accumulate'、'inner_product'、'partial_sum'、'adjacent_difference' 等。
- 修改函数:'copy'、'copy_if'、'copy_n'、'fill'、'fill_n'、'replace'、'replace_if'、'swap' 等。
- 移除函数:'remove'、'remove_if'、'unique' 等。
- 合并函数:'merge'、'inplace_merge' 等。
- 堆函数:'make_heap'、'push_heap'、'pop_heap'、'sort_heap' 等。
- 其他函数:'min'、'max'、'min_element'、'max_element'、'reverse'、'rotate' 等。
使用 'algorithm' 库可以大大简化我们的代码,提高开发效率。
排序函数用法
以下列举所有排序函数的具体用法:
1. 'sort'
函数原型:'void sort (RandomAccessIterator first, RandomAccessIterator last);'
功能:对 '[first, last)' 区间内的元素进行升序排序。
示例代码:
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
sort(arr, arr + 10);
// 数组 arr 中的元素变为 {1, 1, 2, 3, 3, 4, 5, 5, 6, 9}
2. 'stable_sort'
函数原型:'void stable_sort (RandomAccessIterator first, RandomAccessIterator last);'
功能:对 '[first, last)' 区间内的元素进行升序排序,保证相等元素的相对位置不变。
示例代码:
struct Student {
string name;
int age;
};
bool cmp(Student a, Student b) {
return a.age < b.age;
}
Student stu[] = {{"Tom", 18}, {"Jack", 20}, {"Lucy", 18}, {"Mary", 19}};
stable_sort(stu, stu + 4, cmp);
// 结构体数组 stu 中的元素按照年龄升序排序,相同年龄的按照原来的顺序
3. 'partial_sort'
函数原型:'void partial_sort (RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last);'
功能:对 '[first, last)' 区间内的元素进行部分排序,保证前 middle-first 个元素是整个序列中最小的 middle-first 个元素。
示例代码:
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
partial_sort(arr, arr + 5, arr + 10);
// 数组 arr 中前 5 个元素变为 {1, 1, 2, 3, 3},其余元素的顺序不确定
4. 'nth_element'
函数原型:'void nth_element (RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last);'
功能:对 '[first, last)' 区间内的元素进行部分排序,保证第 n 个元素是整个序列中第 n 个最小的元素,'[first, nth)' 区间内的元素小于等于第 n 个元素,'(nth, last)' 区间内的元素大于等于第 n 个元素。
示例代码:
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
nth_element(arr, arr + 5, arr + 10);
// 数组 arr 中第 5 个元素为 3,[arr, arr+5) 区间内的元素小于等于 3,(arr+5, arr+10) 区间内的元素大于等于 3
原文地址: https://www.cveoy.top/t/topic/jJik 著作权归作者所有。请勿转载和采集!