最近在查看vector动态扩容的时候,想到一个问题: vector动态扩容的时候,其内存是重新分配的,那么&vector岂不也是动态变化的,那么这将是一个严重的问题。
验证代码如下:
int main()
{
vector<int> vec;
for (int index = 0; index < 20; ++index)
{
vec.push_back(index);
cout << "size: " << vec.size() << " capacity: " << vec.capacity() << " vector address: " << &vec << " data address: " << vec.data() << endl; // .data member function 从c++11才引入,可改成&vec[0]
}
system("pause");
return 0;
}
从测试结果来看,vector应该维护了一个结构体,来保存其数据首地址,长度等信息,这样&vector并不会改变,扩容改变的是数据的首地址。
string同理。