c++ - 为什么for循环没有停止?

标签 c++ for-loop vector

我的程序中有一个for循环没有停止:

vector<int> v;
int k = 1;
v.push_back(1);

for(int i=v.size()-1; i>=(v.size()-k); i--){
    cout << i << " " << v.size() - k << endl;
}
当我执行上述程序时,它会继续在for循环内运行。 for循环的输出如下:
0 0
-1 0
-2 0
-3 0
-4 0
.
.
.
根据输出,i的值在减小,v.size()-k的值为0。因此,i >= v.size()-k为false,这应该使for循环在第一轮之后停止执行,但是for循环不会停止执行。
有人可以帮助我了解这个问题吗?

最佳答案

您正在检查i是否大于或等于零。但是由于size()返回无符号,因此您正在将i与无符号零进行比较。为了进行比较,将i转换为size()返回的相同无符号类型。好吧,每个无符号整数值都大于或等于零。因此,无论i具有什么值,该比较都是正确的。size()函数必须返回足够大的类型,以容纳 vector 中可能存在的最大条目数。该值可以大于int可以容纳的最大值。在典型的现代平台上,int可能是32位带符号类型,而size()返回的是64位无符号类型。
这是我的编译器发出的警告:

a.cpp: In function ‘int main()’:
a.cpp:10:28: warning: comparison of integer expressions of different signedness:
             ‘int’ and ‘std::vector<int>::size_type’
             {aka ‘long unsigned int’} [-Wsign-compare]
   10 |     for(int i=v.size()-1; i>=(v.size()-k); i--){
      |                           ~^~~~~~~~~~~~~~

关于c++ - 为什么for循环没有停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62957833/

相关文章:

c++ - 如何通过指针删除 vector 元素?

c++ - 为什么使用 fopen 打开流并使用读/写(而不是 fread/fwrite)执行 I/O

C++ - 分配器类型提供的非平凡指针的构造是否会抛出异常?

C++ 变量类型类似于 Builder TDateTime 类型

c++ - 找到等于实数分数的自然数分数

python - 更快的 3D 矩阵操作 - Python

for-loop - 如何在Kotlin中重新启动for循环

for-loop - 打破 Julia 中的循环

javascript - 在 JavaScript 中,为什么 "reverse while"循环比 "for"快一个数量级?

c++ - 在运行时填充多维 vector