C++ 算法
C++ 算法
在前面的章节中,你学习了数据结构(例如向量、列表等)用于存储和组织数据。
算法通过对数据结构进行排序、搜索和操作来解决问题。
算法库提供了许多有用的函数,可以使用迭代器来执行这些任务。
要使用这些函数,您必须包含算法头文件:
// Include the algorithm library
#include <algorithm>
排序算法
要对数据结构中的元素进行排序,可以使用 sort() 函数。
sort() 函数接受 迭代器(通常是由 begin() 返回的 起始迭代器 和由 end() 返回的 结束迭代器)作为参数:
示例
// 创建一个名为 cars 的向量,用于存储字符串。
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 是要查找的值:
示例
Seach for the number 3 in "numbers":
// 创建一个名为 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);
// 将数字中的元素复制到 copiedNumbers
copy(numbers.begin(), numbers.end(), copiedNumbers.begin());
亲自试一试 »
要用某个值填充向量中的所有元素,可以使用 fill() 函数:
示例
将 numbers 向量中的所有元素填充为值 35:
// 创建一个名为 numbers 的向量,用于存储 6 个整数。
vector<int> numbers(6);
// 将数字向量中的所有元素填充为值 35。
fill(numbers.begin(), numbers.end(), 35);
亲自试一试 »
完整算法参考
如需完整的算法函数参考,请访问我们的C++ 算法参考。

