![](/img/trans.png)
[英]Median of multiple vectors of double (c++, vector < vector<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.