C++ 算法
C++ 算法
在前面的章节中,您了解到数据结构(如 vectors、lists 等)用于存储和组织数据。
算法用于通过排序、搜索和操作数据结构来解决问题。
<algorithm>
库提供了许多有用的函数,可使用 迭代器 来执行这些任务。
要使用这些函数,您必须包含 <algorithm>
头文件
// 包含算法库
#include <algorithm>
排序算法
要对数据结构中的元素进行排序,可以使用 sort()
函数。
sort()
函数接受 迭代器(通常是 begin()
返回的开始迭代器和 end()
返回的结束迭代器)作为参数
示例
// 创建一个名为 cars 的 vector,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 按字母顺序对汽车进行排序
sort(cars.begin(), cars.end());
自己动手试一试 »
默认情况下,元素按升序排序。在上面的示例中,由于元素是字符串,因此它们是按字母顺序排序的。
如果我们有一个整数向量,它们将按数值顺序排序
示例
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按数值顺序对数字进行排序
sort(numbers.begin(), numbers.end());
自己动手试一试 »
要反转顺序,可以使用 rbegin()
和 rend()
代替 begin()
和 end()
示例
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按数值顺序反向排序数字
sort(numbers.rbegin(), numbers.rend());
自己动手试一试 »
要仅对特定元素进行排序,可以这样做:
示例
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按数值顺序对数字进行排序,从第四个元素开始(仅排序 5、9 和 2)
sort(numbers.begin() + 3, numbers.end());
自己动手试一试 »
搜索算法
要搜索向量中的特定元素,可以使用 find()
函数。
它接受三个参数:start_iterator, end_iterator, value
,其中 value 是要搜索的值
示例
在 "numbers" 中搜索数字 3
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 搜索数字 3
auto it = find(numbers.begin(), numbers.end(), 3);
自己动手试一试 »
要查找大于特定值的第一个元素,可以使用 upper_bound()
函数
示例
在 "numbers" 中查找大于 5 的第一个值
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按升序对向量进行排序
sort(numbers.begin(), numbers.end());
// 在排序后的向量中查找大于 5 的第一个值
auto it = upper_bound(numbers.begin(), numbers.end(), 5);
自己动手试一试 »
upper_bound()
函数通常用于已排序的数据结构。这就是为什么我们在上面的示例中首先对向量进行排序的原因。
要查找向量中的最小元素,请使用 min_element()
函数
示例
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 查找最小的数字
auto it = min_element(numbers.begin(), numbers.end());
自己动手试一试 »
要查找最大的元素,请使用 max_element()
函数
示例
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 查找最大的数字
auto it = max_element(numbers.begin(), numbers.end());
自己动手试一试 »
修改算法
要将元素从一个向量复制到另一个向量,可以使用 copy()
函数
示例
将元素从一个向量复制到另一个向量
// 创建一个名为 numbers 的向量,它将存储整数
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 创建一个名为 copiedNumbers 的向量,它应该存储 6 个整数
vector<int> copiedNumbers(6);
// 将 elements 从 numbers 复制到 copiedNumbers
copy(numbers.begin(), numbers.end(), copiedNumbers.begin());
自己动手试一试 »
要用某个值填充向量中的所有元素,可以使用 fill()
函数
示例
将 numbers 向量中的所有元素填充为值 35
// 创建一个名为 numbers 的向量,它将存储 6 个整数
vector<int> numbers(6);
// 将 numbers 向量中的所有元素填充为值 35
fill(numbers.begin(), numbers.end(), 35);
自己动手试一试 »
完整的算法参考
有关算法函数的完整参考,请访问我们的 C++ 算法参考。