【问题标题】:C++ ranged based for loop基于 C++ 范围的 for 循环
【发布时间】:2018-05-02 08:34:33
【问题描述】:

尝试使用基于范围的 for 循环来做某事。可以通过这样的常规 for 循环来完成:

vector<double> sensorReadings(3);
sensorReadings = {0,0,0};

for (int i = 0; i < sensorReadings.size();i++)
{
    sensorReadings[i] += i + 100 ;

}

我想将向量的第一个元素设置为 n(在本例中为 100),并将所有其他元素设置为 n+1。在这种情况下,在上述循环运行之后,向量是 100,101,102,根据需要。我的问题是使用范围基循环执行此操作总是将所有元素设置为相同的值。如何将上述循环变成基于范围的 for 循环?我的尝试如下:

vector<double> sensorReadings(3);
sensorReadings = {0,0,0};


for(double &sensorVal: sensorReadings)
{
    double y = 100;
    sensorVal = y;
    y++;
}


for (double i: sensorReadings)
   cout << " " << i ;

这个循环只是设置向量的所有值等于 100

任何帮助都会很棒,谢谢!

【问题讨论】:

  • 如果您能尝试了解程序的流程并提出解决方案,那就太好了。从长远来看,它将为您提供更多帮助。
  • 有时用调试器弄脏你的手非常有用。这是您发现问题比询问其他人更快的情况之一!
  • 有一个函数,std::iota

标签: c++


【解决方案1】:

我发现根本不使用原始循环有时会更好。您正在执行的操作有一个名称,因此标准库有一个算法可以做到这一点。我是std::iota

vector<double> sensorReadings(3);
std::iota(begin(sensorReadings), end(sensorReadings), 100);

现在不需要在心里解析循环来知道它在做什么,也不需要引入多余的变量。

【讨论】:

    【解决方案2】:
    double y = 100;
    for(double &sensorVal: sensorReadings)
    {
        sensorVal = y;
        y++;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-04
      • 2016-10-31
      • 1970-01-01
      • 2021-04-08
      • 2011-06-23
      • 2014-12-06
      相关资源
      最近更新 更多