首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Range-for-loops和语法

Range-for-loops和语法
EN

Stack Overflow用户
提问于 2018-01-22 06:59:55
回答 3查看 77关注 0票数 1

我正在阅读Stroustrup的C++编程原则一书,我已经读到了循环的范围部分。这里给出的代码是直接给出的例子,但我希望有人能解释一下循环到底是怎么回事。

代码语言:javascript
复制
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在哪里呢?

EN

回答 3

Stack Overflow用户

发布于 2018-01-22 07:06:07

通常,range-for循环for (declaration : range)等同于如下所示

代码语言:javascript
复制
for (auto it = begin(range); it != end(range); ++it)
{ 
    declaration = *it;
    // do something
}

(代码简化了,实际上是more to it)

因此,如果您将循环变量声明为int x,并在vector<double>上迭代,则除了获得类型转换double -> int之外,其他一切都会正常工作

代码语言:javascript
复制
int x = *it; // 'it' references a 'double'

综上所述,这似乎是书中的一个打字错误。您可能希望for (double x : temps)能够正确地计算所有内容。

票数 4
EN

Stack Overflow用户

发布于 2018-01-22 07:04:53

for(int x: temps)意味着对于向量temps中的每个元素,让我们将其命名为x,并对x执行一些操作。

票数 1
EN

Stack Overflow用户

发布于 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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48372610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档