一、C++ 算法核心基础(新手必看)
1. 什么是 C++ 算法?
简单说,C++ 算法就是用 C++ 语言实现的、解决特定问题的步骤化逻辑,比如排序、查找、遍历等。C++ 标准库(STL)里的<algorithm>头文件还封装了大量现成的算法,不用自己从零写,是学习和工作的核心利器。
2. 入门必学的核心算法(附极简示例)
(1)排序算法(最常用)
STL 里的sort()是最核心的排序函数,底层是优化后的快速排序,效率极高:
cpp
运行
#include <iostream> #include <vector> #include <algorithm> // 算法头文件 using namespace std; int main() { vector<int> nums = {5, 2, 9, 1, 5, 6}; // 基础排序:升序 sort(nums.begin(), nums.end()); // 输出:1 2 5 5 6 9 for (int num : nums) cout << num << " "; // 降序排序:用greater<>() sort(nums.begin(), nums.end(), greater<int>()); // 输出:9 6 5 5 2 1 cout << endl; for (int num : nums) cout << num << " "; return 0; }(2)查找算法
find()用于在容器中找指定元素,找到返回迭代器,没找到返回end():
cpp
运行
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<string> strs = {"apple", "banana", "orange"}; // 查找"banana" auto it = find(strs.begin(), strs.end(), "banana"); if (it != strs.end()) { cout << "找到元素:" << *it << endl; // 输出:找到元素:banana } else { cout << "未找到" << endl; } return 0; }(3)遍历 / 修改算法
for_each()用于遍历容器并执行自定义操作,比普通 for 循环更简洁:
cpp
运行
#include <iostream> #include <vector> #include <algorithm> using namespace std; // 自定义操作:打印并加1 void printAndAdd(int &num) { cout << num << " "; num += 1; } int main() { vector<int> nums = {1, 2, 3}; // 遍历执行printAndAdd for_each(nums.begin(), nums.end(), printAndAdd); // 输出:1 2 3 cout << endl; // 遍历查看修改后的值:2 3 4 for (int num : nums) cout << num << " "; return 0; }二、C++ 算法进阶方向(按场景分类)
| 应用场景 | 核心算法 | C++ 实现要点 |
|---|---|---|
| 数据处理 | 排序、查找、去重、洗牌 | 熟练用 STL 的 sort/find/unique/shuffle |
| 字符串处理 | 匹配(KMP)、分割、替换 | 结合 string 类 + STL 算法,或手写 KMP |
| 数论 / 数学 | 质数判断、最大公约数、快速幂 | 用 C++ 整数类型(long long)避免溢出 |
| 数据结构配套 | 二叉树遍历、图的 DFS/BFS | 递归 / 迭代实现,结合栈 / 队列容器 |
| 面试高频 | 动态规划、贪心、回溯 | 用 C++ 的数组 /vector 存储状态,优化空间 |
三、C++ 算法学习关键技巧
- 优先用 STL 算法:STL 的算法经过极致优化,比自己手写的效率高、bug 少,比如排序别自己写冒泡,直接用 sort ();
- 掌握迭代器:STL 算法都依赖迭代器(begin ()/end ()),理解迭代器的本质是 “容器的指针”,就能灵活适配 vector、list、map 等不同容器;
- 注意效率:C++ 是编译型语言,算法要关注时间 / 空间复杂度,比如大数据排序用 sort ()(O (nlogn)),别用冒泡(O (n²));
- 异常处理:算法中注意边界条件(比如空容器、越界访问),避免程序崩溃。
总结
- C++ 算法核心是STL 的<algorithm>库,入门先掌握 sort、find、for_each 等基础函数,能覆盖 80% 的日常场景;
- 进阶要结合场景学习专项算法(如动态规划、图遍历),并利用 C++ 的特性(迭代器、容器)优化实现;
- 学习重点是 “理解算法逻辑 + 熟练调用 STL + 关注效率与边界”,而非死记硬背代码。