我想要:

  • 存储默认索引值“-1”。如果我完成了对 vector 的迭代(使用for循环),并且索引值仍为“-1”,那么我知道我的for循环检查的值均不匹配。
  • 如果找到合适的值,请更新索引值以匹配我要遍历的 vector 中的值的索引。

  • 例:
    int index = -1;
    for (int i; i < vector.size(); i++){
        if (vector[i] == 1) {
            index = i;
            break;
        }
    }
    

    但是,我总是从for (int i; i < vector.size(); i++)收到关于“有符号和无符号整数表达式之间的比较”的警告。不幸的是,我不能只使用unsigned integer index = -1,因为无符号整数不能存储负值。 unsigned int i值存储在int index中是否安全,还是需要找到其他比较方法? 在这种情况下,我将for循环更改为for (unsigned int i; i < vector.size(); i++),但其余代码保持不变。

    我可以使用一个单独的 bool(boolean) 变量,但是每次遇到这种情况时,使用额外的变量似乎比较困惑。看起来像这样:
    bool found = false;
    unsigned int index = -1;
    for (unsigned int i; i < vector.size(); i++){
        if (vector[i] == 1) {
            index = i;
            bool = true;
            break;
        }
    }
    

    最佳答案

    使用迭代器代替,作为奖励,您根本不必编写循环:

    auto it = std::find( vector.begin(), vector.end(), 1 );
    if( it == vector.end() ) {
        ... // not found
    }
    

    您可以根据需要使用带有显式循环的迭代器。
    auto it = vector.begin();
    for( ; it != vector.end(); ++it ) {
         if( *it == 1 ) break;
    }
    
    if( it == vector.end() ) {
        ... // not found
    }
    auto index = std::distance( vector.begin(), it );
    

    关于c++ - 在C++中的for循环上进行迭代,并将迭代器与负数进行比较。一个int可以存储一个未签名的int吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49680583/

    10-11 22:34
    查看更多