分配一个(固定大小)矢量<矢量<double>>以便高效访问并添加它们?



我正在实现一种算法,该算法使用相当大的vector(vector(double((类型进行存储;预分配后不会添加或删除任何元素。我想确保元素访问尽可能快,我还需要添加和扩展其中的几个(元素(。最好的方法是什么?

以下是我(天真(代码的相关部分,我怀疑它们是否有效:

vector<vector<double>> z;
vector<vector<double>> mu;
vector<vector<double>> temp_NNZ;
..
for(int i = 0; i < init.valsA.size(); ++i){
z.push_back({});
mu.push_back({});
temp_NNZ.push_back({});
for(int j = 0; j < init.valsA[i].size(); ++j){
z[i].push_back(0);
mu[i].push_back(0);
temp_NNZ[i].push_back(0);
}
}
..
for(int i = 0; i < z.size(); ++i){
for(int j = 0; j < z[i].size(); ++j){
z[i][j] = temp_NNZ[i][j] - mu[i][j]/rho - z[i][j];
}
}

有两种方法可以做到这一点:vector::resize将创建所有元素,并对它们进行值初始化(或者如果你给它一个初始值,则复制初始化它们(,vector::reserve将允许您提前分配所需的内存量而无需初始化它(这可能更有效(。在第一种情况下,您必须将最终值复制到已经存在的元素(z[i] = x(,而在另一种情况下,您必须像使用当前代码一样创建元素(z.push_back(x)(。

最新更新