我有一個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