Din*_*har 1 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;
}
Run Code Online (Sandbox Code Playgroud)
当我执行上述程序时,它一直在for循环内运行。for循环的输出如下:
0 0
-1 0
-2 0
-3 0
-4 0
.
.
.
Run Code Online (Sandbox Code Playgroud)
根据输出,值i递减,值为v.size()-k0。所以,i >= v.size()-k为假,应该for在第一轮后停止循环执行,但for循环不会停止执行。
有人可以帮我理解这个问题吗?
您正在检查是否i大于或等于零。但是由于size()返回一个无符号,您正在与i一个无符号零进行比较。为了进行比较,i被转换为size()返回的相同无符号类型。好吧,每个无符号整数值都大于或等于零。因此,无论值i具有什么,比较都是正确的。
该size()函数必须返回一个足够大的类型,以容纳向量中可能存在的最大条目数。这可能大于一个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--){
| ~^~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |