如何使用范围将这个 python for 循环转换为 C++?

Posted

技术标签:

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

考虑使用range 的Python for 循环:

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

随着循环的迭代,i 取值n-2n-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讨论 【参考方案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程序员来说,这个版本可能更容易阅读。

以上是关于如何使用范围将这个 python for 循环转换为 C++?的主要内容,如果未能解决你的问题,请参考以下文章

如何将python for循环从顺序转换为并行运行

C++11 反向基于范围的 for 循环

C++11 反向基于范围的 for 循环

如何将 for 循环转换为流

数组在 C++ 中包含来自 python 的范围

简单python for循环上的列表索引超出范围错误