2014-02-24 59 views
1

我有一個將元素存儲在boost :: ptr_vector中的算法。一旦分配到元素的指針不會改變,直到ptr_vector被銷燬,對算法來說非常重要。另一方面,我需要排序ptr_vector。我認爲(可能天真),因爲普通的std :: sort交換元素,它將簡單地交換ptr_vector內指針的順序,而不用新建和刪除。另一方面,我在this post中看到指示:排序ptr_vector實際上可能會更改元素指針。有人可以確認實際發生重新分配嗎?有沒有辦法避免它?如何在不更改元素指針的情況下對boost :: ptr_vector進行排序

回答

0

指針向量作爲一個容器顯然正在排序。

假如你想保留的所有有效迭代器和元素引用,你應該使用

  • 的boost :: stable_vector
  • 或可能是一些組合/升壓用多指標

可悲的是(?)我不認爲目前有什麼結合了這兩個概念。當然,這樣的事情可以寫出來,然後Boost Intrusive可以非常有助於管理實施。

1

我現在認爲我的恐懼可能不是是有道理的。看起來the post that prompted my concerns引用標準庫排序,這確實會導致交換和重新分配元素。但ptr_vector有一個排序的成員函數實現,我有充分的理由期望它保留元素指針並避免重新分配。

相關問題