比方說,我有一個:STL哈希列表 - 我可以指向STL列表中的項目到另一個項目嗎?
std::vector<std::list<Node> >
而且假設節點是:
class Node {
Node* next;
int data;
};
細胞對應的散列函數值的快速查找窗口的向量。這個想法是你將元素插入到矢量中,但仍然將它們與Node-> next成員鏈接在一起。因此,您有一個列表,可以通過密鑰使用散列函數有效查找元素,以查找從哪個元素開始的正確矢量單元格。
無論如何,所有這一切。我的問題是:
我可以讓我的Node :: next指針指向列表中的其他節點(是同一個還是來自不同矢量單元的另一個節點),而不會導致問題?我不確定列表的標準庫實現是否允許這樣做。我似乎遇到了問題(我的代碼在這裏無法訪問),我想看看這是否可能是原因。
據我所知,的std :: list和std ::矢量分配一定的一堆內存,並加入項目時,可能當沒有足夠的空間適合所有人時,將所有項目移到內存的不同部分。 這顯然會導致此代碼中的問題。 – nijansen 2011-12-23 18:30:58
我知道std :: vector做到了這一點,因爲它需要連續的內存 - 我不會期望它從列表中,但因爲它會涉及額外的元素複製,沒有任何好處。你確定名單嗎? – 2011-12-23 18:32:48
@nijansen你對'std :: vector'正確,但'std :: list'不移動項目。 (當然,在'vector'裏面有一個'list',就有可能複製'list'。) – 2011-12-23 18:34:53