vector의 할당된 공간이 꽉 차면 (평균적으로) 두 배의 크기로 재할당이 일어난다는 사실은 알고 있었다.
그런데 그 과정에서 주소가 함께 변경이 된다는 점을 생각하지 못했다.
막연히 '더 넓은 공간으로 이동' 이라는 개념과
'직접적인 주소도 변경될 것' 이라는 사실이 함께 연상이 되지 않았다.
int main()
{
vector<int> vec {1, 2, 3};
vector<int>::iterator iter = vec.begin();
int* numPtr = &vec[0];
cout << "----- before reserve -----" << endl;
cout << "numPtr : " << numPtr << endl;
cout << "*iter : " << *iter << endl;
cout << "&vec[0] : " << &vec[0] << endl;
vec.reserve(vec.capacity() + 1);
cout << "----- after reserve -----" << endl;
cout << "numPtr : " << numPtr << endl;
cout << "*iter : " << *iter << endl;
cout << "&vec[0] : " << &vec[0] << endl;
}
❗ 결과
----- before reserve -----
numPtr : 0xf91940
*iter : 1
&vec[0] : 0xf91940
----- after reserve -----
numPtr : 0xf91940
*iter : 16325056
&vec[0] : 0xf91980