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

如何用C++23的zip_transform和repeat实现按最小值缩放输入范围?

关于C++23 zip_transform和repeat视图的语法正确性确认

你的scale_by_min函数在语法层面完全符合C++23标准中zip_transform和repeat视图的设计规范,具体说明如下:

  • 核心语法符合标准设计
    std::views::repeat(m)会生成一个无限重复值m的视图,而std::views::zip_transform的作用就是将多个输入视图的对应元素配对,传递给指定的可调用对象处理。由于你传入的原range是有限长度,zip_transform会自动以较短的视图(即原range)的长度作为输出视图的长度,完全满足需求。
  • 参数与调用写法正确
    函数参数使用auto&& range作为转发引用,能够兼容左值和右值类型的输入范围;std::ranges::min(range)的调用符合C++20及以后的ranges库用法(前提是输入范围的元素类型支持<比较运算符,且范围非空,题目已明确范围存在非零最小值,满足该前提)。

你的实现代码:

auto scale_by_min(auto&& range)
{
    auto m = std::ranges::min(range);
    return std::views::zip_transform(
        range,
        std::views::repeat(m),
        [](auto x, auto min)
        {
            return x / min;
        }
    );
} 

补充说明:你提到的C20替代写法(使用transform)确实更简洁,但这并不影响你用C23新视图实现的语法正确性——从C++23的标准提案设计来看,你的代码写法是完全合规的。

内容的提问来源于stack exchange,提问作者René Richter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:54:18