C++ 教程

C++ 教程 C++ 简介 C++ 下载安装和环境配置 C++ 快速入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学运算 C++ 布尔值 C++ 条件语句 C++ Switch 语句 C++ While 循环 C++ For 循环 C++ Break/Continue 语句 C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针 C++ 内存管理

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 作用域 C++ 递归 C++ Lambda 表达式

C++ 面向对象

C++ OOP C++ 类和对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++友元函数 C++ 继承 C++ 多态

C++ 错误

C++ 错误 C++ 调试 C++ 异常 C++ 输入验证

C++ 数据结构

C++ 数据结构和 STL C++ 向量 C++ 列表 C++ 栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++命名空间

C++ 命名空间

C++ 项目

C++ 项目

C++ 如何使用

C++ 两个数相加 C++ 随机数

C++ 关键字与函数参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 高级教程

C++ 动态内存 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程 C++ 正则表达式

C++ 实例

C++ 实例 C++ 练习 C++ 测验 C++ 编译器

C++ 标准库参考

C++ 标准库 - 简介 C++ 标准库 - <fstream> C++ 标准库 - <iomanip> C++ 标准库 - <ios> C++ 标准库 - <iosfwd> C++ 标准库 - <iostream> C++ 标准库 - <istream> C++ 标准库 - <ostream> C++ 标准库 - <sstream> C++ 标准库 - <streambuf> C++ 标准库 - <atomic> C++ 标准库 - <complex> C++ 标准库 - <exception> C++ 标准库 - <functional> C++ 标准库 - <limits> C++ 标准库 - <locale> C++ 标准库 - <memory> C++ 标准库 - <new> C++ 标准库 - <numeric> C++ 标准库 - <regex> C++ 标准库 - <stdexcept> C++ 标准库 - <string> C++ 标准库 - <thread> C++ 标准库 - <tuple> C++ 标准库 - <typeinfo> C++ 标准库 - <utility> C++ 标准库 - <valarray>

C++ 模板库参考

C++ STL 库 - <array> C++ STL 库 - <bitset> C++ STL 库 - <deque> C++ STL 库 - <forward_list> C++ STL 库 - <list> C++ STL 库 - <map> C++ STL 库 - <queue> C++ STL 库 - <set> C++ STL 库 - <stack> C++ STL 库 - <unordered_map> C++ STL 库 - <unordered_set> C++ STL 库 - <vector> C++ STL 库 - <algorithm> C++ STL 库 - <iterator>



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++ 算法参考。