You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C++20 ranges优雅实现嵌套for循环的扁平化

C++20 Ranges 扁平化双层嵌套循环的更简洁实现

你当前使用std::views::transform + std::views::join + std::ranges::for_each的写法已经是C++20标准下非常规范的Ranges风格实现,还有两种更贴近原生循环书写习惯的精简方案:

方案1:范围for配合视图管道(C++20 原生支持)

直接用范围for遍历拉平后的视图,省去手写lambda的冗余:

for (const char ch : persons | std::views::transform(&Person::name) | std::views::join) {
    std::cout << ch << '\n';
}
  • 补充优化:把std::endl替换为'\n',可以避免不必要的强制缓冲区刷新,提升输出性能
  • 如果项目编码规范允许引入视图命名空间,可以进一步简化前缀:
using namespace std::views;
for (const char ch : persons | transform(&Person::name) | join) {
    std::cout << ch << '\n';
}

方案2:C++23 适配场景(可选)

如果可以升级到C23标准,针对更复杂的多层嵌套场景,还可以配合std::views::cartesian_product、std::views::join_with等特性进一步简化,但针对你当前的两层遍历场景,C20的写法已经足够精简。

所有上述实现和原生双层for循环性能完全一致,全程没有额外的对象拷贝,只是语法层面的扁平化封装。

内容的提问来源于stack exchange,提问作者NoSenseEtAl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:06:04