闽公网安备 35020302035485号
#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排序,流水线操作,干净利落。手动循环也能干,但你得写两遍循环,代码冗长还容易出错。