我正在阅读Stroustrup的C++编程原则一书,我已经读到了循环的范围部分。这里给出的代码是直接给出的例子,但我希望有人能解释一下循环到底是怎么回事。
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() << '\n';
// compute median temperature:
sort(temps); // sort temperatures
cout << "Median temperature: " << temps[temps.size()/2] << '\n';
}特别是,有人能解释一下int x在平均循环中是从哪里来的吗?我假设这个场景中的for循环通过向量temps进行搜索,但是int x在哪里呢?
发布于 2018-01-22 07:06:07
通常,range-for循环for (declaration : range)等同于如下所示
for (auto it = begin(range); it != end(range); ++it)
{
declaration = *it;
// do something
}(代码简化了,实际上是more to it)
因此,如果您将循环变量声明为int x,并在vector<double>上迭代,则除了获得类型转换double -> int之外,其他一切都会正常工作
int x = *it; // 'it' references a 'double'综上所述,这似乎是书中的一个打字错误。您可能希望for (double x : temps)能够正确地计算所有内容。
发布于 2018-01-22 07:04:53
for(int x: temps)意味着对于向量temps中的每个元素,让我们将其命名为x,并对x执行一些操作。
发布于 2018-01-22 07:05:03
您可以将for(int x: temps读作"for each element x in temps“。换句话说,当循环遍历vector时,x的值从temps的一个元素中逐一赋值。
还要注意,int x应该是double x,因为temps的元素是doubles。
https://stackoverflow.com/questions/48372610
复制相似问题