2015-03-31 140 views
1

只要您不刪除當前項目,在爲集合執行for_each時從集合中刪除元素是否合法?C++在for_each期間從擦除元素中刪除元素

設置擦除保持除正被擦除的所有迭代器都有效。

例如:

set<int> nums{0, 1, 2, 3, 4}; 

void weird_remove(int x) { 
    int randnum = rand() % 5; 
    if (randnum != x) { 
     nums.erase(randnum); 
    } 
} 

int main() { 
    for_each(nums.begin(), nums.end(), weird_remove); 
} 

而且怎麼樣範圍在循環中?

我假設答案適用於地圖以及設置。

回答

2

問:

是否合法擦除從set一個元素,而這樣做for_eachset,只要你不刪除當前的項目嗎?

是的,這是合法的。

http://en.cppreference.com/w/cpp/container/set/erase

size_type erase(const key_type& key); (3)

中刪除指定的從所述容器的元件。
3)使用鍵值鍵刪除所有元素。

對擦除元素的引用和迭代器將失效。其他引用和迭代器不受影響。