#include <iostream> #include <vector> int main() { std::vector<int> nums = {3, 7, 2, 9, 6, 4, 8, 5}; int count = 0; for (constauto& num : nums) { if (num > 5) { count++; } } std::cout << "大于5的个数: " << count << std::endl; // 输出:5 return0; }这代码简单吧?遍历每个元素,判断一下,计数加一。看起来没毛病,但问题在哪呢?
扩展性差:要是需求改成“大于5且是偶数”,你还得再加个条件,改来改去烦死人。
#include <iostream> #include <vector> #include <algorithm> // 算法库,核心玩家 int main() { std::vector<int> nums = {3, 7, 2, 9, 6, 4, 8, 5}; int count = std::count_if(nums.begin(), nums.end(), [](int x) { return x > 5; }); std::cout << "大于5的个数: " << count << std::endl; // 输出:5 return 0; }看看这个,用std::count_if一行搞定!nums.begin()和nums.end()指定范围,后面跟个lambda表达式[](int x) { return x > 5; }告诉它“找大于5的”。结果一样,但体验完全不同:
高效:编译器认识std::count_if,能使出浑身解数优化,性能有保障。
#include <execution> // 并行策略 int main() { std::vector<int> nums = {3, 7, 2, 9, 6, 4, 8, 5}; int count = std::count_if(std::execution::par, nums.begin(), nums.end(), [](int x) { return x > 5; }); std::cout << "大于5的个数: " << count << std::endl; }加上std::execution::par,算法自动拆分任务给多核跑,速度嗖嗖快。你要是手写循环并行,代码量翻倍不说,还得防数据竞争,累不累啊?
#include <algorithm> #include <vector> #include <iostream> int main() { std::vector<int> nums = {3, 7, 2, 9, 6, 4, 8, 5}; std::vector<int> result; std::copy_if(nums.begin(), nums.end(), std::back_inserter(result), [](int x) { return x > 5; }); std::sort(result.begin(), result.end()); for (int x : result) std::cout << x << " "; // 输出:6 7 8 9 std::cout << std::endl; return 0; }std::copy_if筛选,std::sort排序,流水线操作,干净利落。手动循环也能干,但你得写两遍循环,代码冗长还容易出错。