如果您在下面的示例中看到我已将向量调整为大小,3并且我将指针存储data1在数据[5],您是否认为这是一个问题,除非我不存储超过3条记录.
这绝对完美无缺,但这是正确的方法吗?
#include<iostream>
#include <vector>
struct Data
{
int age;
int id;
};
int main()
{
std::cout<<"inside main"<<std::endl;
std::vector<Data*> data;
data.resize(3);
Data *data1 = new Data();
std::cout<<"after resize"<<std::endl;
data1-> age = 28;
data1-> id = 5592;
data[5] = data1;
std::cout<<"after populate = ";
std::cout<<data[5]->age<<std::endl;
return 0;
Run Code Online (Sandbox Code Playgroud)
一个std::vector是不是在这个意义上话的稀疏容器 data.resize(3)允许你在你所选择的任何索引分配3个元素的矢量.事实并非如此.
您只能分配给索引0,1和2.尝试访问时的行为data[5]是未定义的.
由于您的C++运行时库可能为3个以上的元素分配空间,因此它似乎正在这个场合工作,作为消除内存碎片的有用优化.可能你可以通过查看向量的容量来判断.但永远不要依赖容量作为您可以访问的索引的上限.