一些常用的 <algorithm 函数包括:
头文件在 C++ 标准库中包含了大量的通用算法,这些算法可以应用于各种容器,如数组、向量、列表等。以下是一些 头文件中包含的主要函数(注意,这里并没有列出所有函数,因为数量相当多,而且一些函数是模板函数,可以应用于多种数据类型):
排序和搜索 | |
std::sort: | 对序列进行排序。 |
std::stable_sort: | 稳定排序,即相等的元素保持原有顺序。 |
std::partial_sort: | 对序列进行部分排序。 |
std::nth_element: | 将第 n 个元素放到其最终排序位置,且该元素前(后)的元素均不大于(不小于)它。 |
std::binary_search: | 在已排序的序列中执行二分查找。 |
std::lower_bound 和 std::upper_bound: | 在已排序的序列中查找元素的插入位置。 |
序列操作 | |
std::copy: | 复制序列中的元素到另一个位置。 |
std::copy_n: | 复制序列中的前 n 个元素到另一个位置。 |
std::copy_backward: | 从后向前复制序列中的元素。 |
std::move: | 移动序列中的元素到另一个位置。 |
std::swap: | 交换两个元素的值。 |
std::iter_swap: | 交换通过迭代器指向的两个元素的值。 |
std::replace: | 将序列中的特定元素替换为另一个元素。 |
std::replace_if: | 根据谓词将序列中的元素替换为另一个元素。 |
std::replace_copy: | 复制序列,同时替换其中的特定元素。 |
std::fill: | 用给定的值填充序列。 |
std::fill_n: | 用给定的值填充序列的前 n 个元素。 |
std::generate: | 使用给定的函数对象生成序列中的元素。 |
std::generate_n: | 使用给定的函数对象生成序列的前 n 个元素。 |
std::remove: | 从序列中“删除”特定元素(实际上是将元素移动到序列末尾并返回新逻辑末尾的位置)。 |
std::remove_if: | 根据谓词从序列中“删除”元素。 |
std::remove_copy: | 复制序列,同时“删除”其中的特定元素。 |
std::unique: | 去除序列中连续的重复元素。 |
std::unique_copy: | 复制序列,同时去除连续的重复元素。 |
std::rotate: | 旋转序列中的元素。 |
std::reverse: | 反转序列中的元素顺序。 |
std::reverse_copy: | 复制序列,同时反转元素的顺序。 |
std::shuffle: | 随机重排序列中的元素。 |
std::next_permutation: | 获取序列的下一个排列(字典序)。 |
std::prev_permutation: | 获取序列的上一个排列(字典序)。 |
集合操作 | |
std::includes: | 检查一个序列是否是另一个序列的子序列。 |
std::set_union: | 计算两个已排序序列的并集。 |
std::set_intersection: | 计算两个已排序序列的交集。 |
std::set_difference: | 计算两个已排序序列的差集(第一个序列中存在而第二个序列中不存在的元素)。 |
std::set_symmetric_difference: | 计算两个已排序序列的对称差集(只在一个序列中存在的元素)。 |
查找和比较 | |
std::find: | 在序列中查找特定元素。 |
std::find_if: | 根据谓词在序列中查找元素。 |
std::find_first_of: | 在序列中查找属于另一个序列的第一个元素。 |
std::find_end: | 在序列中查找另一个序列的最后一次出现。 |
std::adjacent_find: | 查找序列中相邻的重复元素或满足特定条件的相邻元素对。 |
std::count: | 统计序列中特定元素的出现次数。 |
std::count_if: | 根据谓词统计序列中满足条件的元素数量。 |
std::mismatch: | 比较两个序列,找到第一个不匹配的元素对。 |
std::equal: | 检查两个序列是否相等。 |
std::equal_range: | 在已排序的序列中查找元素的范围。 |
std::is_permutation: | 检查两个序列是否包含相同的元素,但顺序可能不同。 |
std::lexicographical_compare: | 按字典序比较两个序列。 |
std::min_element 和 std::max_element: | 查找序列中的最小(最大)元素。 |
std::minmax_element: | 同时查找序列中的最小和最大元素。 |
abs() //int abs(int j);,//将返回j的绝对值。
max(x,y) //返回两个元素中值最大的元素
min(x,y) //返回两个元素中值最小的元素
swap(x,y) //用来交换x和y的值
下面是一个使用 std::sort 函数对整数向量进行排序的简单示
#include <iostream>
#include <vector>
#include <algorithm> // 包含 algorithm 头文件
int main() {
std::vector<int> numbers = {5, 3, 8, 4, 2};
std::sort(numbers.begin(), numbers.end()); // 对向量进行排序
// 输出排序后的向量
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在这个例子中,我们首先包含了 头文件,然后在 main 函数中创建了一个整数向量 numbers,并使用 std::sort 函数对其进行了排序。最后,我们遍历并输出了排序后的向量。
通过使用 头文件中的函数,你可以避免重复编写通用的算法代码,并可以利用 C++ 标准库提供的优化实现。这有助于提高代码的可读性、可维护性和性能。
在 C++ 中,for (int num : numbers) 这种语法是 C++11 引入的范围基于的 for循环(range-based for loop)。它提供了一种更简洁的方式来遍历容器(如数组、向量、列表等)中的元素,而无需使用传统的迭代器或下标访问。
每次循环迭代时,num 会被赋值为 numbers 容器中的下一个元素,直到容器中的所有元素都被访问过。