簡體   English   中英

從向量/地圖中刪除值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM