gpt4 book ai didi

c++ - 为什么这段代码的 vector 迭代器没有停止?

转载 作者:行者123 更新时间:2023-12-02 10:29:57 25 4
gpt4 key购买 nike

我是C++的初学者。
当我做运动问题时,我遇到了问题。
根据代码!
我期望从factor.size()到0做。
但是,它没有像。
它返回我,从factors.size()到0,-1(4294967295),-2(4294967294),...
为什么此代码不返回0并且不停止?
如果您知道,请让我解释一下。

    vector<int>::size_type iter;
for (iter=factors.size()-1 ; iter >= 0 ; --iter)
{
//cout << factors[iter];
cout << iter;
cout << " : " << factors[iter] << endl;
}
//----------- Full Code --------------//
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int find_max_bit(int n)
{
int i = 0;
int nTmpNum = 0;
int nMaxJisu = 0;
int ret = 0;

nTmpNum = n;
while (nTmpNum >= 1)
{
nMaxJisu++;

nTmpNum = (int) (nTmpNum / 2);
}

ret = (int) nMaxJisu;

return ret;
}

std::vector<int> binary_factors(int n)
{
std::vector<int> factors;

cout << "find_max_bit : " << find_max_bit(n) << endl;

factors.reserve(find_max_bit(n));

int bi_Num;
for (int i = 0; i < find_max_bit(n) ; i++)
{
bi_Num = n >> i & 0x1;
cout << bi_Num;
factors.push_back(bi_Num);
cout << " : size : " << factors.size() << endl;
}

return factors;
}

int main()
{
int nNum;

cin >> nNum;

while (nNum < 0 || nNum > 31)
{
cin >> nNum;
}


auto factors = binary_factors(nNum);

cout << "factors.size() = " << factors.size() << endl;

cout << nNum;

for (auto it = factors.begin(); it != factors.end(); ++it)
cout << ' ' << *it;
cout << endl;

vector<int>::size_type iter;
for (iter=factors.size()-1 ; iter >= 0 ; --iter)
{
//cout << factors[iter];
cout << iter;
cout << " : " << factors[iter] << endl;
}
}

最佳答案

这个循环:

for (iter=factors.size()-1 ; iter >= 0 ; --iter)
保证永不终止,因为 iter(即 vector<int>::size_type)是无符号类型。当您从无符号0减去1时,您会得到一个大的正数,而不是负数。由于 iter永远不会变为负数,因此永远不会满足循环条件。
您可以通过使 iter为有符号整数来解决此问题:
for (auto iter = static_cast<int>(factors.size()) - 1 ; iter >= 0 ; --iter)

关于c++ - 为什么这段代码的 vector 迭代器没有停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62603926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com