这个问题来源于这个话题:
我正在使用类型的数据结构vector<vector<vector<double> > >
。double
在添加项目(s)之前,不可能知道这些向量中的每一个(除了外部向量)的大小。我可以得到每个“维度”中项目数量的近似大小(上限)。
具有共享指针的解决方案可能是要走的路,但我想尝试一个解决方案,其中vector<vector<vector<double> > >
简单地拥有.reserve()
足够的空间(或以其他方式分配了足够的内存)。
A.reserve(500)
(假设 500 是大小,或者大小的上限)是否足以容纳大尺寸的“2D”向量,比如 [1000][10000] ?
我提出问题的原因主要是因为我看不到任何合理估计当时的内部大小的A
方法.reserve(500)
。
我的问题的一个例子:
vector<vector<vector<int> > > A;
A.reserve(500+1);
vector<vector<int> > temp2;
vector<int> temp1 (666,666);
for(int i=0;i<500;i++)
{
A.push_back(temp2);
for(int j=0; j< 10000;j++)
{
A.back().push_back(temp1);
}
}
这会确保不对 A 进行重新分配吗?
如果temp2.reserve(100000)
并且temp1.reserve(1000)
在创建时添加,这将确保根本不会发生重新分配吗?
.reserve()
在上面请忽略由于保守的调用可能会浪费内存的事实。
谢谢大家!