當我試圖寫出一個新的算法來重新對std :: vector中的元素進行排序時,我遇到了這個問題。基本的想法是,我有std :: list指向std :: vector的指點器,其方式如下:*list.begin() == vector[0]
,*(++list.begin()) == vector[1]
等等。 但是,對列表元素位置的任何修改會破壞映射。 (包括附加指針)映射斷開時,列表的元素可以是隨機順序的,但它們仍然指向矢量上的正確元素。任務是重新排列向量中的元素以更正映射。C++使用std ::指針列表重新排列std :: vector元素
最簡單的方法來做到這一點(如何我現在已經做到了):
- 創建新的空的std ::載體,並調整舊矢量的大小相等。
- 遍歷列表並從舊矢量讀取元素並將它們寫入新矢量。將指針設置爲指向新矢量的元素。
- 交換矢量並釋放舊的矢量。
不幸的是,只有當我需要更多的載體容量時,該方法纔有用。當包含元素的當前向量具有足夠的容量來存儲所有傳入元素時,效率很低。列表中的附加指針將指向不同矢量的storgate。簡單的方法適用於此,因爲它只從指針讀取。
所以,我想重新排列使用恆定內存量的「就地」向量。任何未指向當前矢量的storgate的指針都將移動到指向當前矢量的storgate中。元素是簡單的結構。 (POD) 我會嘗試發佈一個示例代碼,當我有時間的時候..
我該怎麼做才能做到這一點?我已經完成了基本想法,但我不確定是否可以用恆定的內存量進行重新排序。 PS:我很抱歉在帖子中可能有不好的語法和拼寫錯誤。我希望它仍然可讀。 :)
你需要做什麼? –
這聽起來像是你的用例使用了不正確的數據結構。爲什麼不直接使用矢量? – sirbrialliance
我必須將元素存儲在連續內存中。 – JATothrim