C ++向量大小。为什么-1大于零

And*_*kha 2 c++ comparison unsigned vector

请看一下这个简单的程序:

#include <iostream>
#include <vector>

using namespace std;

int main() {

vector<int> a;

std::cout << "vector size " << a.size() << std::endl;

int b = -1;

if (b < a.size())
   std::cout << "Less";
else
   std::cout << "Greater";

    return 0;
Run Code Online (Sandbox Code Playgroud)

}

尽管很明显-1小于0,但它仍输出“ Greater”,这让我感到困惑size。谁能解释一下?

jua*_*nza 5

因为向量的大小是无符号整数类型。您正在将无符号类型与有符号类型进行比较,并且两者的补码负号有符号整数将被提升为无符号类型。这对应于较大的无符号值。

此代码示例显示与您看到的相同的行为:

#include <iostream>
int main()
{
  std::cout << std::boolalpha;
  unsigned int a = 0;
  int b = -1;
  std::cout << (b < a) << "\n"; 
}
Run Code Online (Sandbox Code Playgroud)

输出: