我想遍歷一個列表,然後,如果對象的板號與通過參數給出的板號相匹配,並且收費(以收費()計算)小於或等於給定的分,從列表中刪除/刪除對象。我不斷收到列表迭代器不能增加的錯誤,我對如何解決這個問題毫無頭緒。C++ |列表迭代器不可遞增
void one_time_payment(string& plate_number, int cents) {
// TODO: REWRITE THIS FUNCTION
std::list<LicenseTrip>:: iterator it;
for (it = listLicense.begin(); it != listLicense.end(); std::advance(it, 1)) {
if (it->plate_number().compare(plate_number) == 0) {
cout << "Matching Plate Found" << endl;
if (it->toll() <= cents) {
cout << "Can be paid" << endl;
it = listLicense.erase(it); //Error: list iterator cannot be incremented
}
}
}
cout << "End of Iterator" << endl;
}
取代'它= listLicense.erase(它);''與listLicense.erase(它);' –
(HTTP [未能與GCC重現]:// melpon.org/wandbox/permlink/4ADAdPjUCnV3cthh)。請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MikeCAT
無法用gcc重現。此外,代碼中存在一個錯誤。如果「if」條件返回true,則會導致未定義的行爲。在這種情況下,erase()將返回end(),這將被分配給'it',並且循環迭代再次遞增'it'。這是未定義的行爲。 –