[英]Erasing values from vector/map
這是從我的載體或地圖上刪除所有條目的安全方法
向量
my_vector.erase(my_vector.begin(),my_vector.end());
例如地圖
my_map.erase(my_map.begin(),my_map.end());
映射或向量結構包含元素,在這些元素的析構函數中要小心進行解除分配
end()返回的迭代器值在開始刪除元素時會變得無效嗎?
兩個erase()
方法被設計為用於排除第二個迭代范圍工作。
// erase elements in range [a,b)
Iterator erase(Iterator a, Iterator b);
因此它是安全的調用erase()
為你做什么,但你不妨稱之為clear()
在這兩種情況下。
為std::vector/std::map
調用erase(begin, end)
是安全的,它也對其他STL容器( list, set, deque etc
)有效,這些容器提供了erase
成員函數和用於迭代元素的迭代器。
只要傳入有效范圍(beg,end),以下兩個范圍也是有效的,則erase
無需任何努力:
c.erase(c.begin(), c.begin());
c.erase(c.end(), clend());
std::vector::erase(beg,end)
刪除范圍[beg,end)的所有元素,並返回下一個元素的位置。
std::map::erase(beg,end)
刪除范圍[beg,end)的所有元素並返回以下位置(在C ++ 11之前未返回任何內容)。
在STL內部實現中,它在一些函數中調用erase(begin,end)
:
void clear() noexcept;
Effects: Behaves as if the function calls:
erase(begin(), end());
void assign(size_type n, const T& t);
Effects:
erase(begin(), end());
insert(begin(), first, last);
如您所見, erase(begin(),end());
與clear()
相同。
另外,您可以調用swap
來清除STL容器,這在“ More Effective STL
建議:
vector<Contestant> v;
vector<Contestant>().swap(v); //clear v and minimize its capacity
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.