2012-04-27 59 views
14

我都是如何獲得std :: set的第一個元素

我在我的軟件中發現了一個奇怪的錯誤。

內部while循環,我從一個std刪除元素::集,我想總是直到容器是空採取的第一個元素:

std::set< int*> nodes; 
// Fill nodes 
for (int i=0; i<10;i++) 
    nodes.insert(new int); 
// 
while (!nodes.empty()) 
{ 
int* pivot = (*nodes.begin()); 
// do some operation with pivot erasing some elements from nodes 
} 

我發現,執行的第一個元素這樣的作品與海灣合作委員會,但不與MSVC,它崩潰,我試圖取消引用(*nodes.begin())迭代器。

std :: set的兩個實現的行爲是否有所不同?

我想要一個沒有實現差異的數據結構,這有可能嗎?

也許我必須改變VS2010數據結構,對於這種操作

+0

您提領後會怎樣刪除? – Nick 2012-04-27 13:34:41

+5

什麼是「做一些操作與樞軸擦除節點的一​​些元素」 – 2012-04-27 13:34:57

+4

只是像這樣解除*(nodes.begin()) – v01d 2012-04-27 13:35:02

回答

2

你的代碼工作做好,mybe您應該更新您的VCC。

-3

您不能在這樣的集合上使用迭代器,因爲從集合中刪除元素會使迭代器無效。當集合的大小低於某個閾值時(根據設置迭代器時的初始大小),它將修改堆中數據的底層存儲,這將使您的迭代器指針指向廢話。

參見下迭代器的有效性: http://www.cplusplus.com/reference/set/set/erase/

(* nodes.begin()),你想要做什麼,你就不能從一個設置你的迭代通過

相關問題