假設我有INTS的載體,矢量指針位置有保證嗎?
std::vector<int> numbers;
被填充了一堆價值的,後來我說做這個(其中一個條目,爲43存在)
int *oneNumber = &numbers[43];
是oneNumber保證總是指向索引43處的int,即使我說我將數字調整爲諸如numbers.resize(46)之類的東西?
我不是100%確定這裏預期的行爲是什麼,我知道向量保證是連續的,但不確定這個連續性是否也意味着向量中的所有索引在整個生命週期中都保持在同一個地方。
出於這個原因,我總是小心翼翼創造價值類型的載體,因爲我必然需要一個指向矢量內的對象。所以我保存了一個引用,例如'int * ref =&numbers [43]'..稍後,將'push_back'變成'numbers'和WHAMMO!錯誤:'ref'是無效的,因爲'numbers'已經完全重新分配並保存在完全不同的內存空間中。 – bobobobo 2013-01-05 00:41:58
@bobobobo非常真實。儘管在創建時已知元素數量的情況(並且不能,我不能使用'std :: array',因爲我'emplace'-通過循環構造值),'reserve'保證所有的指針/迭代器進入向量將保持有效,只要它的大小不超過當前的容量(這可能迫使重新分配並因此移動所包含的值的地址)。這爲我節省了幾次,但是每次連續的時間,我都忘記「保留」,並且在我記憶的時候,劃傷我的頭腦一段時間。 :D – 2016-01-12 18:46:49