[英]For loop iterator issues c++
我在获取代码引发运行时错误以及使这些循环正常工作时遇到问题,我不确定为什么。
如果用户要输入名称和余额,例如:josh 100,则程序应将100添加到listAccounts向量中名为josh的帐户,然后打印新余额。
关于该行的内容:for(; iter!= listAccounts.end(); iter ++){
由于某种原因,这会导致if语句不起作用,如果我将该行注释掉,该功能将起作用,但仅对listAccounts中的最后一个元素起作用。 for循环是否有问题,导致其无法单步执行每个元素?
void Account::change_balance(string name, int balance, int i) {
try {
auto iter = listAccounts.begin();
for ( ; iter != listAccounts.end(); iter++) {
if ((*iter).account_name == name) {
if (((*iter).account_type == 0) && (((*iter).account_balance +
balance) < 0)) {
throw runtime_error("account cannot hold negative
balance");
(*iter).account_balance = (((*iter).account_balance) -
(balance));
cout << (*iter).account_balance;
} else {
(*iter).account_balance = balance +
(*iter).account_balance;
cout << (*iter).account_balance;
}
}
}
}
catch (runtime_error& e) {
cout << "error on line " << i << ": " << e.what() << "\n";
}
}
我无法弄清楚哪里出了问题,任何指示将不胜感激。 谢谢。
检查您的内部循环。 您永远不会增加迭代器,您要做的就是将listAccounts.size()与向量的相同元素与function参数进行比较。 由于循环在k == listAccounts.size()时结束,因此只有当外部循环至少进行另一轮运行时,才能满足条件n == listAccounts.size(),因为您没有清除n(或在本地定义n) )。 但是现在,它可能会触发并说“找不到帐户”,即使它在那里,因为n == listAccounts.size()。 这不是您想要的行为。
您应该重新考虑算法。 为什么每次遍历帐户列表时都遍历所有帐户? 一次就足够了。 考虑做这样的事情:
for(auto& account : listAccounts) {
if(account.account_name == name) {
// do your logic stuff and eventually:
return;
}
}
// if your program gets here, no account with such a name was found
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.