我有2個std ::列表。我想刪除列表1中的所有項目並將其插入到第二個項目中,反之亦然。我的代碼無法正常工作(獲得訪問衝突和「列表迭代器不dereferencable」)的第二個方法列表迭代器擦除「調試斷言失敗」
for (std::list<Item *>::iterator it = list1.begin(); it != list1.end(); ++it) {
it = list1.erase(it);
list2.push_back(*it);
}
it = list1.begin();
it = list2.erase(it); // because the last element is not deleted in the above loop
list2.push_back(*it);
對稱碼。我設法在兩個列表之間轉移項目一次,但接下來我得到錯誤。
任何幫助?
'std :: swap(list1,list2)'? – Johnsyweb 2013-02-10 23:33:43
@Johnsyweb'std :: list :: swap'成員函數保證是恆定時間。它應該只涉及交換兩個指針(可能是C++ 11中的一個大小數據成員)。 – juanchopanza 2013-02-10 23:40:08
@juanchopanza:那肯定會更好。 std :: swap'函數仍然會執行比提供的實現更好:) – Johnsyweb 2013-02-10 23:43:39