我有一个STL容器,我需要对容器中的每个元素执行一个操作。但是,如果操作在任何元素上失败,我想要对已经更改的任何元素进行操作。迭代前进,然后通过STL容器反向
例如,如果我有一个指向bankAccount类的指针的STL向量,并希望每增加50美元。但是,如果任何一个银行账户未能增加50个,我想完全取消增加,并且任何已经增加的账户减少50美元。
std::vector<bankAccount*> bankAccounts;
std::vector<bankAccount*>::iterator iter;
for (iter = bankAccounts.begin(); iter != bankAccounts.end(); ++iter)
{
try
{
iter->increaseBalance(50);
}
catch (...)
{
// One of the bankAccounts failed to increase by 50, now I need to go
// back and decrease by 50 all of the bankAccounts that have already
// been increased.
}
}
有没有什么优雅的方式来做到这一点?也许用STL算法或使用反向迭代器?
编写* functor *并使用* for_each * – 2010-07-15 18:50:49
是否可以循环并检查操作是否成功?那么你只要确保他们都会成功,如果是的话,就执行这个动作。 – GManNickG 2010-07-15 18:59:29
您应该捕获您期望可能抛出的特定异常。如果你有一个catch(...)块,你不知道抛出了什么异常,离开这个catch块的唯一明智的方法是重新抛出异常或终止应用程序。 – 2010-07-15 19:00:25