Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
在11个月前关闭。
从如下所示的输入文件开始:
我正在尝试将此数据读取到C ++中的2D数组中(第一行指定行数/列数)。
我的代码当前如下所示:
但是,似乎在2D数组的每一行中都存储着最后一行。因此,当输出
至
我想这是疏忽大意的错误。
就是说,有更安全/更好的方法来声明/使用2D数组。这是一个可能的示例:
输出:
请记住,在进行数值计算时,通常最好将所有数字存储到连续的内存块中(就像在
要访问组件,请使用:
按以下顺序循环更有效:
按此顺序循环更有效率
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
在11个月前关闭。
从如下所示的输入文件开始:
2 3
2 3 4
4 3 2
我正在尝试将此数据读取到C ++中的2D数组中(第一行指定行数/列数)。
我的代码当前如下所示:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fin;
fin.open ("dataset.in");
// a matrix
int a_numrows;
int a_numcols;
int a[a_numrows][a_numcols];
fin >> a_numrows >> a_numcols;
cout << a_numrows << " " << a_numcols << endl;
for (int i = 0; i<a_numrows; i++)
{
for (int j = 0; j<a_numcols; j++)
{
fin >> a[i][j];
}
}
cout << a[0][0] << endl;
fin.close();
return 0;
}
但是,似乎在2D数组的每一行中都存储着最后一行。因此,当输出
a[0][0]
时,它将返回4
。我不认为这种行为应该来自其他语言。 最佳答案
您必须置换以下几行:
int a[a_numrows][a_numcols];
fin >> a_numrows >> a_numcols;
至
fin >> a_numrows >> a_numcols;
int a[a_numrows][a_numcols];
我想这是疏忽大意的错误。
就是说,有更安全/更好的方法来声明/使用2D数组。这是一个可能的示例:
#include <fstream>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::ifstream fin("dataset.in");
size_t n_rows, n_cols;
fin >> n_rows >> n_cols;
using T = int;
std::vector<T> array(n_rows * n_cols);
array.assign(std::istream_iterator<T>(fin), std::istream_iterator<T>());
fin.close();
//-----
for (size_t i = 0; i < n_rows; i++)
{
for (size_t j = 0; j < n_cols; j++)
{
std::cout << array[i * n_cols + j] << "\t";
}
std::cout << endl;
}
return 0;
}
输出:
g++ reader.cpp; ./a.out
2 3 4
4 3 2
请记住,在进行数值计算时,通常最好将所有数字存储到连续的内存块中(就像在
std::vector
中完成的一样)。在这种情况下,编译器可以更轻松地向量化您的代码。要访问组件,请使用:
[i*n_cols+j]
:主要行(C样式)->给定的示例,按以下顺序循环更有效:
for i { for j ... } }
[j*n_rows+i]
:主要列(Fortran样式)->与Blas和Lapack兼容,按此顺序循环更有效率
for j { for i ... } }
关于c++ - C++-将数字表从文件读入2D数组(仅存储最后一行),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54315593/
10-11 18:44