首先我想说的是,我有一个 vector ,里面有数千个 vector 。这些内部 vector 中的每一个内部都有数千个数字。我想尽可能地保持内存管理安全和内存使用。
我想问下有没有类似下面的代码
int size = 10;
vector<vector<double>>* something = new vector<vector<double>>(size);
vector<double>* insideOfSomething;
for(int i = 0; i < size; i++){
insideOfSomething = &(something->at(i));
//...
//do something with insideOfSomething
//...
}
我知道将在堆中创建“某物”。我不明白的是 vector 的放置位置,“insideOfSomething”点?如果它们是在堆栈中创建的,那么这意味着我有一个 vector 指针,它指向堆中的一个 vector ,其中包含在堆栈中创建的 vector ? (我现在很困惑。)
如果我有类似下面的代码;
vector<vector<double>*>* something = new vector<vector<double>*>(size);
vector<double>* insideOfSomething;
for(int i = 0; i < size; i++){
something->at(i) = new vector<double>();
insideOfSomething = something->at(i);
//...
//do something with inside insideOfSomething
//...
}
知道我所有的 vector 都存储在堆中,对吗?
根据内存管理,哪个更有用?
最佳答案
你应该避免在堆上分配 vector ,而只是在堆栈上声明它们,因为 vector 会为你管理它在堆上的对象。在任何你想避免创建拷贝的地方,你可以只使用引用或 const
引用(这是必要的)。
vector<vector<double> > something(size);
for(int i = 0; i < size; i++)
{
vector<double> &insideOfSomething = something.at(i);
//use insideOfSomething
}
关于c++ - vector 指针内存分配 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487926/