繁体   English   中英

向量的访问向量<double*>

[英]Access Vector of Vectors <double*>

我在访问vector <vector <* double >>中保存的双精度数时遇到麻烦。 我正在读取.txt文件,并将存储在其中的值(应该构成矩阵)保存在我的向量载体中。

vector <vector<double*>> HypMean;

ifstream myFile;
myFile.open(nameOfFile);

if (myFile.is_open() && myFile.good()) {
string line;    
while(getline(myFile, line)){    //Get line-by-line in file

    istringstream buffer(line);
    string value;
    int numLoop = 0;
    vector <double*> tempVector;

    while (getline (buffer, value, ',')){       //Get character by character in line
        istringstream valuebuffer(value);
        tempVector.push_back(new double[1]);
        valuebuffer >> *(tempVector.back() + numLoop);

        cout << *(tempVector.back() + numLoop) << " ";

        numLoop++;
    }

    HypMean.push_back(tempVector);
    cout << endl;
}   
myFile.close(); 
}

这是我的功能,我想我保存的是正确的值,因为当我在创建“ tempVector”的同时打印它时就可以了。

0.014872 0.078519 0.071838 -0.10371
-0.16741 -0.0063904 0.0018366 0.21238
0.13796 -0.29323 0.23489 -0.074523

但是,当我尝试访问整个对象(HypMean)时,我不知道该怎么做。 我没有运气就尝试了以下方法:

for (int x=0; x<3; x++){
     for (int y=0; y<4; y++){
        cout << *(HypMean[x][y]) << " ";
 }
 cout<<endl;

}

0.014872 -6.27744e+66 -6.27744e+66 -6.27744e+66
-0.16741 -6.27744e+66 -6.27744e+66 -6.27744e+66
0.13796 -6.27744e+66 -6.27744e+66 -6.27744e+66 

有什么想法吗? 我应该更改什么才能正确访问它? 提前致谢!

问题是在这些行中,您正在写入和读取一些随机存储器:

valuebuffer >> *(tempVector.back() + numLoop);
cout << *(tempVector.back() + numLoop) << " ";

在对push_back的调用之后, tempVector.back()是对tempVector中最后一个元素的引用,该元素是指向double大小为1的数组中的第一个元素的指针。如果numLoop指针添加numLoop ,则会得到一些随机的内存关闭了double数组的末尾。

您可以通过将以下行更改为“修复”它:

valuebuffer >> *tempVector.back();
cout << *tempVector.back() << " ";

但是,没有充分的理由来分配大小为1的double的数组,而不是std::vector<std::vector<double*>> 仅使用std::vector<std::vector<double>>会更简单,您可以使用类似以下的内容:

tempVector.push_back(0.0);
valuebuffer >> tempVector.back();

然后,您可以使用以下命令读取2D矢量:

for (int x=0; x<3; x++){
    for (int y=0; y<4; y++){
        cout << HypMean[x][y] << " ";
    }
    cout<<endl;
}  

还是更好

for (const auto& v : HypMean){
    for (auto value : v) {
        cout << value << " ";
    }
    cout<<endl;
}

现场演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM