【问题标题】:How can I convert this python for-loop using a range into C++?如何使用范围将这个 python for 循环转换为 C++?
【发布时间】:2021-03-07 07:54:22
【问题描述】:

考虑使用range 的Python for 循环:

for i in range(n-2, -1, -1):

随着循环的迭代,i 取值n-2、n-3,直到0。

C++ 中的等价代码是什么?


这个问题几乎是从另一个已删除的question 中逐字复制的。

【问题讨论】:

  • 我看不出这对其他读者有什么用处,它的标题太笼统而无法真正显示在任何搜索中,然后 for 循环本身就是 c++ 的一个非常基本的构造
  • 我还是看不出这和What's the best way to do a backwards loop in C/C#/C++?有什么不同
  • 您的问题太宽泛了:您需要帮助确定 Python 的功能吗?你不知道如何编写 C++ 循环吗?这两个问题本身就表明您缺乏研究,因为它们在各自的语言中都是非常基本的问题。
  • @chepner 我不同意这个问题过于宽泛。我要求将单行 python 翻译成 C++,它的范围很窄。我认为这暗示我理解 python 循环的作用,但我很高兴在问题中澄清这一点。我完全同意这个问题表明缺乏研究努力。在这种情况下,请对该问题投反对票。但是,请注意,缺乏研究或问题是基本的事实并不是密切的原因。
  • 这个问题正在the meta讨论

标签: python c++ for-loop


【解决方案1】:

C++ 中的等效代码:

for(int i = n-2 ; i > -1 ; i--) {
    ...
}

【讨论】:

    【解决方案2】:

    虽然经典的 for(;;) 循环可用于您可以想象的任何迭代,但您的特定循环可以这样编写,更具可读性:

    namespace sv = std::views;
    
    for (int i : sv::iota(0, n-1) | sv::reverse)
    {
      // ...
    }
    

    这是demo。

    为了完整起见,下面是经典的 for(;;) 循环的样子:

    for (int i = n-2; i > -1; --i)
    {
      // ...
    }
    

    在我看来,这是更多的认知努力,正是因为我必须通过阅读语法在脑海中运行迭代。我发现第一个版本读起来更自然。

    【讨论】:

    • 对于曾经用 C 代码喂养过的老恐龙,第二个版本看起来更加简单、自然和可读。但这只是口味问题......
    • @SergeBallesta 是的,我完全同意。对于不熟悉经典版本的python程序员来说,这个版本可能更容易阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多