【问题标题】:Defining variables in for's parentheses [closed]在for的括号中定义变量[关闭]
【发布时间】:2014-12-19 02:49:57
【问题描述】:

我不明白为什么变量 i 在 first for 中并不为人所知。 在 for 的括号中定义变量是如何工作的? (如果用 int i 做,我仍然会出错)

void cardlike(vector<int> &v)
{
        unsigned max_pos = 0;
        int tmp;
        for (unsigned i = 0; i < v.size(); i++);
        {
                for (unsigned j = 0; j < v.size() - i; j++)
                        if(v[j] > v[max_pos])
                                max_pos = j;

                tmp = v[max_pos];
                v[max_pos] = v[v.size() - i - 1];
                v[v.size() - i - 1] = tmp; 
        }
}

这是我在使用 -std=c++11 编译时从 g++ 得到的:

sortvector.cpp:93:38: error: ‘i’ was not declared in this scope   
   for(unsigned j = 0; j < v.size() - i; j++)
                                      ^
sortvector.cpp:98:29: error: ‘i’ was not declared in this scope   
   v[max_pos] = v[v.size() - i - 1];
                             ^

【问题讨论】:

    标签: c++ for-loop scope declaration


    【解决方案1】:

    for 循环后有一个不必要的分号

    for (unsigned i = 0; i < v.size(); i++);
    

    删除它

    for (unsigned i = 0; i < v.size(); i++)
    

    另外,如果你有一个多行 for 循环,你真的应该使用 {} 大括号

    for (unsigned j = 0; j < v.size() - i; j++)
                            if(v[j] > v[max_pos])
                                    max_pos = j;
    

    for (unsigned j = 0; j < v.size() - i; j++)
    {
        if(v[j] > v[max_pos])
            max_pos = j;
    }
    

    【讨论】:

    • 张贴为什么可能是个好主意吗?即for(;;); 循环通过空语句;for (;;) x(); y(); 将仅循环通过x();。也许像“虽然应该注意循环中只有一个语句(if 语句),但即使是单行ifs 也是一个好习惯,因为它可以帮助防止将来出现问题编辑代码时”
    【解决方案2】:

    这里去掉分号:

            for (unsigned i = 0; i < v.size(); i++)
                                                   ^
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2011-09-18
      • 2019-03-08
      相关资源
      最近更新 更多