은 가정하자 나는 INT의 벡터 값의 무리로 채워집니다벡터 포인터 위치가 보장됩니까?
std::vector<int> numbers;
, 그럼 내가 (항목 43에 존재하는)이
int *oneNumber = &numbers[43];
이 oneNumber 보장 할 말을 numbers.resize (46)와 같은 것으로 숫자를 크기 조정한다고해도 항상 인덱스 43의 int를 가리키고 있습니까?
예상되는 동작이 여기에 있는지 100 % 확신 할 수는 없지만 연속성이 보장되면 연속성이 보장되어 벡터의 모든 인덱스가 평생 동안 동일한 위치에 유지된다는 것을 확신 할 수 있습니다.
. 그래서 저는'int * ref = & numbers [43]'과 같은 참조를 저장합니다. 나중에'push_back'을'numbers'와 WHAMMO에 넣습니다! 버그 :'ref'는 무효합니다. 왜냐하면'numbers'가 완전히 다른 메모리 공간에 완전히 할당되고 저장되기 때문입니다. – bobobobo
@bobobobo 매우 사실. 생성시에 요소의 수를 알고있는 상황에서 (그리고 루핑으로 값을 생성하기 때문에'std :: array'를 사용할 수 없습니다.)'reserve'는 모든 포인터/반복자를 보장합니다 (현재 할당량을 초과하여 크기가 재조정되지 않고 포함 된 값의 주소를 이동시킬 수있는 경우) 유효합니다. 이것은 몇 차례 나를 구원해 줬지만, 계속되는 모든 시간 동안, 나는 기억할 때까지 잠시 머리를 긁어 내고 '예비'하는 것을 잊는다. : D –