矢量的访问向量<双倍*>
Access Vector of Vectors <double*>
我在访问vector <向量&>>。我正在阅读一个。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
中最后一个元素的引用,该元素是指向大小为1的double
数组中的第一个元素的指针。如果你把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;
}
现场演示。
相关文章:
- 我想知道长双倍和双倍之间的区别
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- 按值 C++ 返回时进行双倍移动
- 求和 int 乘以双倍时的欠/过近似
- 从'size_t'转换为"常量双倍",可能会丢失数据
- 二叉搜索不收敛为双倍
- 将一个双倍值乘以10会发生什么
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 双吨级 - 从单级过渡到双倍级
- 如何将包含指数的 QString 转换为C++中的双倍?
- 防止在字符数组中输入双倍空格在 C++
- 将双倍转换为 LPARAM 的麻烦
- 现代计算机上的双倍和浮点内存分配
- 将 CSV 文件中的双倍值C++到矢量中
- 假设 a 是双倍的,2.0*a 比 2*a 快吗?
- 双倍、长双、浮子和浮子的比较128?
- 是新的(&*p)双倍;一个无操作。因此,uninitialized_default_construct是否也变得无操作?
- 如何将标准::string_view转换为双倍?
- 动态数组的双倍大小
- 错误:无法在赋值中将"双 ()(双)抛出 ()"转换为"双倍"