2012-12-20 60 views
6

我構建了一個std::list項目(圖形組件結構),它們定期合併在一起。這個想法是,如果我發現連接兩個組件的節點成爲一個單一的組件,我的列表枚舉我的組件。每個組件都有一個句柄(在這種情況下爲std::list<component>::iterator)到它的「父」組件,一旦它被合併就會被設置。這種方式來確定一個特定的節點屬於我的組成部分,我走了這條鏈。刪除std :: list中的項目,同時保留它分配

在什麼我在尋找,到底是上std::list操作,讓我把項目N的迭代器,並從列表中,但沒有重新分配它刪除:列表的其餘部分的結構以與正常移除相同的方式進行修改。

最好比重新分配項目,從列表中複製它,並調用真正的removeerase不那麼醜。

也許我可以用splice來完成它。我需要將要刪除的元素拼接成「垃圾」list,不是嗎?

+5

'拼接成一個_junk list_聽起來正確... –

+0

而且這種方法不太可能使用不兼容的分配器會強制複製。儘管如此,還有一些額外的指針正在洗牌。那麼......不會*傷害*有一種方法來遍歷我的非完全孤兒節點。 –

+0

爲什麼使用列表而不是列表是不是適合你? –

回答

1

你可以用拼接來做到這一點。例如,移動*it到垃圾名單:

junk.splice(junk.begin(),comp_list,it); 

您還可以添加布展構造函數來component。然後,從列表中移動內容擦除TMP的變種,這樣的事情之前:

component tmp(*it); 
li.erase(it); 

而且福明阿爾謝尼的建議,使用以組件(或std::shared_ptr)指針列表也不錯。

+0

一個普通的'list '可能會導致比必要的更多的手工簿記,但'list >'也可能是一個可靠的方法。我想保持簡單:使用垃圾清單方法,我可以避免編寫'new'關鍵字。 –

相關問題