【问题标题】:Confused about ranged for loops对范围内的 for 循环感到困惑
【发布时间】:2020-05-05 03:28:10
【问题描述】:

对我来说,这不会产生预期的结果:

int main() {

    int i[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

    for (auto v : i)
        std::cout << v << std::endl;

    for (auto v : i)
        v = v+1;

    for (auto v : i)
        std::cout << v << std::endl;

    return 0;
}

第二个for 循环似乎没有做任何事情。基于范围的 for 循环是只读的,还是我遗漏了什么?

【问题讨论】:

    标签: c++ ranged-loops


    【解决方案1】:

    在您的第二个循环中,auto v : i、v 是每个i 的副本。

    要更改i 值,您需要reference:

    int main() {
      int i[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
    
      for (auto v : i)
        std::cout << v << std::endl;
    
      for (auto& v : i)  // Add "&" here. Now each v is a reference of i.
        v = v + 1;
    
      for (auto v : i)
        std::cout << v << std::endl;
    
      return 0;
    }
    

    演示:https://ideone.com/DVQllH.

    【讨论】:

    • @RikardRasmussen 如果有帮助,您介意接受答案吗?
    • 当然!它告诉我我还有 6 分钟的等待时间。
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2017-05-03
    • 2020-12-11
    • 2021-07-14
    • 2014-07-08
    • 2017-09-20
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多