【问题标题】:Is statement in for each loop executed each iteration? [duplicate]每个循环中的语句是否每次迭代都执行? [复制]
【发布时间】:2017-06-28 01:35:51
【问题描述】:

我有一个返回容器的函数。我们就叫它“Container”吧。

Container GenerateRandomContainer() { ... }

此函数将生成一个容器,其中包含每次调用都不同的随机元素。

当我像这样使用 for each 循环遍历这个容器时:

for(Element e : GenerateRandomContainer()) { ... }

它会在每次迭代时生成一个新的Container,还是在进入 for each 循环时只生成一个?

【问题讨论】:

  • GenerateRandomContainer() 只会被调用一次。另请参阅en.cppreference.com/w/cpp/language/range-for,它准确解释了 range-for 构造的执行方式。
  • 我去看看。
  • 请注意,这会将每个元素复制到e;使用Element &e(或auto& e)来引用容器中的每个元素
  • 这是一个很好的提示,谢谢!

标签: c++ c++11 foreach containers ranged-loops


【解决方案1】:

range-based for loop 等效如下:

{
    auto && __range = range_expression ; 
    auto __begin = begin_expr ;
    auto __end = end_expr ;
    for ( ; __begin != __end; ++__begin) { 
        range_declaration = *__begin; 
        loop_statement 
    } 
} 

注意第一条语句auto && __range = range_expression ;range_expression 将是GenerateRandomContainer() 用于您的代码);这意味着Container 将只生成一次,并迭代它的所有元素。

【讨论】:

    【解决方案2】:

    它只会生成一次容器,然后循环将遍历生成的元素。

    【讨论】: