擦除循環內的向量元素
在C 中,由於迭代器可能無效,因此在迭代期間操作向量可能會很棘手。本文解決了根據循環內的條件從向量中安全刪除元素的問題。
初始程式碼和錯誤訊息
原始問題中提供的程式碼嘗試在迭代向量時從向量中刪除元素。但是,它遇到錯誤訊息「'operator ='函數在'Player'中不可用。」
錯誤原因
發生錯誤是因為擦除( )方法內部使用賦值運算子(=) 來移動向量內的元素。 Player 類別缺少賦值運算子會導致擦除() 無法成功執行。
解
要解決此問題,程式碼應先實作賦值Player 類別的運算子。此外,它應該避免在循環內遞增迭代器 (it ),因為它會在每次迭代時自動更新。
替代方法:擦除刪除慣用語
The Erase-Remove Idiom 為這個問題提供了更優雅、更有效率的解決方案。它利用 std::remove_if() 函數來識別並消除滿足指定條件的元素。下面的程式碼示範了這個方法:
allPlayers.erase( std::remove_if( allPlayers.begin(), allPlayers.end(), [](Player const & p) { return p.getpMoney() <= 0; } // Lambda function to identify players with negative money ), allPlayers.end() );
結論
透過解決無效迭代器的可能性,在必要時實現賦值運算符,並利用高效的演算法,開發人員可以安全地從C 迴圈內的向量中刪除元素。
以上是如何安全地從循環內的 C 向量中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!