【问题标题】:Emulate a python-style list comprehension in c++ using rangesv3?使用 rangev3 在 C++ 中模拟 python 样式的列表理解?
【发布时间】:2018-11-06 03:10:14
【问题描述】:

使用 rangev3 库我可以做到这一点:

  auto march = view::iota(1,32)
              | view::transform(
                [](int i){return date(1995, greg::Mar, i);
                });

给我 1995 年 3 月的日期:

1995-Mar-01
...
1995-Mar-31

有没有办法用更接近 python 的语法来做到这一点:

[date(1995, Mar, i) for i in range(32)] 

我觉得特别是从日期/函数开始有助于代码的可读性。

【问题讨论】:

    标签: c++ range-v3


    【解决方案1】:

    您将获得最接近的是使用可变参数:

    namespace detail {
      template <std::size_t ...Is>
      std::vector<date> generate(std::index_sequence<Is...>) {
        return {date(1995, greg::Mar, Is + 1)...}; // almost like Python
      }
    }
    
    std::vector<date> generate() {
      return detail::generate(std::make_index_sequence<32>());
    }
    

    但是现在你没有使用范围,你必须定义两个单独的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多