迭代器的刪除問題

2021-06-19 01:35:34 字數 1008 閱讀 7057

it = m_ballactionsmgr.

begin

();for (; it != m_ballactionsmgr.end(); ++it)

} 這樣刪除是正確的

it = m_ballactionsmgr.

begin

();for (; it != m_ballactionsmgr.end(); ++it)

} 這樣刪除有問題,刪除迭代器以後,迭代器又加了1,所以刪除的是下乙個元素,這樣的做法是不能一次性刪除符合要求的元素

改進,先把符合要求刪除的元素放在另外乙個迭代器,然後再統一刪除

vector

::iterator

it =m_ballactionsmgr.

begin

();for (; it != m_ballactionsmgr.end(); ++it)

} // 把完成的動作刪除

vector

::iterator

delit =m_willdelactionsmgr.

begin

();for (; delit != m_willdelactionsmgr.end(); ++delit)

} delit = m_willdelactionsmgr.

begin

();for (; delit != m_willdelactionsmgr.end(); ++delit)

m_willdelactionsmgr.

clear

();// 2014-01-22

今天總算搞明白了為什麼會刪除後乙個內容,因為vector是陣列,刪除的時候,後面的元素會往前移動,所以就刪除了後乙個內容

以前遍歷刪除迭代器刪除完之後都用break;

正確的方法,

for (std::vector::iterator it = value.begin(); it != value.end();)

else

}

反向迭代器的刪除

正向迭代器可以正常使用erase操作,進行刪除操作。但是反向迭代器如果直接使用erase傳遞乙個反向迭代器的引數會報錯,但是他們是繼承的關係,所以可以使用base 進行轉換已達到刪除的目的。即使用 it base 作為erase的引數。multimapmm mm.insert make pair 3...

STL刪除迭代器

1.關聯容器刪除乙個迭代器對其他迭代器不會造成影響,返回的是void型。2.序列容器刪除乙個迭代器後會造成後面的所有迭代器都往前移動乙個位置,因此先前儲存的迭代器都會失效,返回的是被刪除後新複製到被刪除位置的元素的迭代器。c 中利用迭代器刪除元素會發生什麼?1 對於關聯容器 如map,set,mul...

C 中容器迭代器刪除失效問題

c 迭代器失效問題 map set等關聯容器如何刪除元素 vector list deque等序列容器如何刪除元素 迭代器如何使用 序列性容器 vector和list和deque erase迭代器不僅使所指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase iter ...