C++基于范围的for循环

3
尝试使用范围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。
任何帮助都将是有益的,谢谢!

1
如果您能够理解程序的流程并提出解决方案,那将会对您长远发展更有帮助。 - Jay Wai Tan
2
有时候用调试器来亲自动手解决问题非常有用。这是其中一种情况,你可以比询问他人更快地找到问题所在! - Jorge Bellon
有一个函数可以实现这个功能,它叫做 std::iota - MSalters
2个回答

8

我发现有时候根本不使用原始循环可能会更好。你正在执行的操作有一个名称,因此标准库中有一个算法可以完成这个任务。它叫做std::iota

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

现在不需要在脑中解析循环的操作,也不需要引入多余的变量。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接