【问题标题】:For loop traversalfor循环遍历
【发布时间】:2020-11-17 20:16:57
【问题描述】:

A 视为vector<int>

enter code here

int x,max;
for(x:A){
    if(x>max)
    max=x;
}

谁能告诉我为什么这给了我错误 这是错误:

solution.cpp:6:10: error: found ':' in nested-name-specifier, expected '::'

    for(x:A){
         ^
        ::

solution.cpp:6:9: error: 'x' is not a class, namespace, or enumeration

    for(x:A){       

错误解决一次是在 for 循环中声明 int xfor(int x :A) 请解决这个问题。提前致谢。

【问题讨论】:

  • 无论如何,对于基于范围的 for 循环,这根本就是不正确的语法
  • 要获取容器的最大元素,请改用std::max_element
  • @Someprogrammerdude 感谢您的建议。你能给我推荐一些好的资源,我可以从中阅读更多关于此类 stl 功能的信息。
  • @khemukaanmol cppreference.comcplusplus.com

标签: c++ for-loop int


【解决方案1】:

for ( range_declaration :

range_declaration - 命名变量的声明,其类型是 range_expression 所表示的序列元素的类型,或对该类型的引用。经常使用 auto 说明符进行自动类型推断

对于 range-for 循环,您需要一个新变量。

【讨论】:

    【解决方案2】:

    引用cppreference(强调我的):

    attr(可选)forrange_declarationrange_expressionloop_statement

    [...]

    range_declaration - 命名变量的声明,其类型是 range_expression 所表示的序列元素的类型,或对该类型的引用。经常使用 auto 说明符进行自动类型推断

    基于范围的循环语法需要声明变量。您不能使用外部变量(在循环之前声明)。

    【讨论】:

    • 所以是因为for循环的范围是这样定义的,还是有任何其他解释说明这样做的原因是什么?
    • @khemukaanmol 是的,它就是这样定义的(“标准是这样说的”)。从外部重用变量不是一个常见的用例,而且很少有意义。我认为允许这样做会给编译器增加额外的工作,但这只是一个猜测。
    • @khemukaanmol 这没什么用,因为循环之前的 x 的值在循环内是不可访问的,只有最后一次迭代的值在循环之后才可以访问,但如果你需要,还有更清洁的方法
    【解决方案3】:

    您不能在 range-for 循环中重用变量。冒号左边必须是声明:

    固定版本:

    for(int x : A){
    

    或者只使用auto关键字:

    for (auto x : A)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      相关资源
      最近更新 更多