2017-01-09 90 views
2

正如answer to another question指出的引用,都指向一個向量的元素後,新的元素被添加到載體,由於底層連續的緩衝區的重新分配可能會變得無效。處理爲受到添加元素爲std :: vector的

是否有一個安全的處理在編譯時這個問題呢?

是否有最佳實踐,以應對或避免的情況,其中引用可以改變數據結構後失效?

+0

我會得到一個異常時,我添加元素而所迭代或者是活動的。我可以在C++中重新創建此行爲嗎? – wotanii

+0

我可以告訴編譯器在存儲對向量中元素的引用時拋出錯誤嗎?如果是這樣,我可以通過總是通過索引獲取元素來解決問題。 – wotanii

回答

-1

對std :: vector本身的指針或引用不會改變。可能會改變的是std :: vector中特定元素的地址,這是由於依賴於實現的重新分配策略。

預分配足夠的空間,是一個風險,因爲你不應該在一個特定的政策執行中繼。

存儲在STD的元素的地址::向量是一個好主意,並可以很容易地避免,因爲標準::矢量[]操作是非常快的,以便存儲索引的元素,而不是地址。這是正確的方式。

+0

這應該是一個評論,而不是一個答案。我認爲可以肯定的是,這是OP的意思,它只是措辭不佳。 –

1

是否有最佳做法來處理或避免某種情況,在更改數據結構後引用可能會失效?預先

  • 預分配足夠的空間矢量
  • 在陣列的代替參考對象的
  • 保持索引/指針本身對象
  • 使用不同的容器中,例如std::list

哪種方式會爲你工作的最好方式在C#取決於你的情況

相關問題