for循环迭代器问题c ++

时间:2017-10-17 16:10:17

标签: c++ loops for-loop iterator try-catch

我在让代码抛出运行时错误以及让这些循环正常工作时遇到问题,我不确定原因。

如果用户要输入名称和余额,例如:josh 100,程序应在listAccounts vector中将名为josh的帐户添加100,然后打印新余额。

关于这一行的事情: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"; 
    }
}

我无法弄清楚我哪里出错了,任何迹象都会非常感激。感谢。

1 个答案:

答案 0 :(得分:0)

检查你的内部for循环。你永远不会增加迭代器,你所做的就是将listAccounts.size()与vector参数的相同元素进行比较。当循环在k == listAccounts.size()时结束,条件n == listAccounts.size()只能在外循环至少进行另一次运行时才能满足,因为你没有清除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