c ++:关于for语句和参数的一般q


c++: general q about for-statements and arguments

本问题已经有最佳答案,请猛点这里访问。

我在学习C++的过程中。我遇到一个关于温度的任务,我不明白。你们能为我澄清一些事情吗?

下面是代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// compute mean and median temperatures
int main()
{
vector<double> temps;              // temperatures
for (double temp; cin>>temp; )     // read into temp
temps.push_back(temp);              // put temp into vector

**// compute mean temperature:
double sum = 0;
for (int x : temps) sum += x;
cout <<"Average temperature:" << sum/temps.size() << '
'
;**

// compute median temperature:
sort(temps);                     // sort temperatures
cout <<"Median temperature:" <<  temps[temps.size()/2] << '
'
;
}

现在第二个数据块(//compute mean temperature)是我无法理解的。

首先,for语句与单个参数一起使用。这不意味着只有一个初始表达式而没有条件吗?

我也不认为我对int X : temps有很好的理解,在这段代码中,in t x在任何地方都没有定义。它不会因为没有赋值而导致错误吗?假设它的值为1;它做什么/检查什么?它是否检查x在向量temps中的拟合次数?为什么不这样做呢:

1
2
3
4
5
6
7
8
int sum_of_measurements = 0;                //value of all measurements
for (int y = 0; y <= temps.size(); ++y){  
sum_of_measurements = sum_of_measurements + temps[y];      // add value of measurement to the total for each measurement
}
double mean = sum_of_measurements/temps.size();
cout << mean <<'
'
;
//rest of code

这个标识符叫什么,这样我可以了解更多关于它的信息(:int X : temps中)

谢谢)


这是在C++11中引入的基于范围的for循环。

像这样的陈述:

1
for (int someVal: someCollection)

将迭代someCollection,其中someVal被设置为集合中的每个项(每次迭代一个)。

在您的特定情况下(在将x的类型更改为更合适的类型之后),代码片段:

1
2
3
double sum = 0;
for (double x : temps)
    sum += x;

在功能上等同于:

1
2
3
double sum = 0;
for (int i = 0; i < temps.size(); ++i)
    sum += temps[i];