迭代C++中的for循环并将迭代器与负数进行比较.int可以存储unsigned int吗?

Cam*_*oen 2 c++ integer unsigned-integer

我想要:

  1. 存储默认索引值"-1".如果我完成遍历向量(使用for循环)并且索引值仍然是"-1",我知道我的for循环检查的值都没有匹配.
  2. 如果找到合适的值,则更新索引值以匹配迭代的向量中的值的索引.

例:

int index = -1;
for (int i; i < vector.size(); i++){
    if (vector[i] == 1) {
        index = i;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我总是收到关于"有符号和无符号整数表达式之间的比较"的警告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 found = false;
unsigned int index = -1;
for (unsigned int i; i < vector.size(); i++){
    if (vector[i] == 1) {
        index = i;
        bool = true;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sla*_*ica 7

使用迭代器而作为奖励你根本不需要写一个循环:

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

如果您愿意,可以使用带有显式循环的迭代器.

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 );
Run Code Online (Sandbox Code Playgroud)