用C++将格式化的数值数据读取到数组中
Reading formatted numerical data to an array in C++
我正在使用C++。我有一个数据文件,它看起来像这样,有几千行,其中第一个数字是行数。
1238
0.37 0.29 -1.00
1.34 -2.95 3.40
4.59 2.21 1.29
我想把它读成二维数组。
我的代码是:
int main(){
ifstream source("atoms.xyz");
int N;
source >> N;
double atoms[N][3];
int i = 0;
for (;i < N; i++){
int j = 0;
for (;j < 3; j ++){
source >> atoms[i][j];
}
}
}
这是惯用语吗?查看其他堆栈溢出的答案,大多数似乎使用"getline"和其他字符串处理函数,但这对我来说似乎过于复杂
首先,在C++中使用可变长度数组是一种扩展,而不是标准特性。当在编译时不知道条目数时,使用std::vector
可以提供更好的可移植性。
如果每行的原子数是固定的并且很小,则更习惯于"展开"内部循环,即写入
source >> atoms[i][0] >> atoms[i][1] >> atoms[i][2];
而不是
for (;j < 3; j ++){
source >> atoms[i][j];
这里有一种使用std::vector<T>
和展开循环重写的方法:
int n;
cin >> n;
vector<array<double,3>> atoms;
for (int i = 0 ; i != n ; i++) {
array<double,3> data;
cin >> data[0] >> data[1] >> data[2];
atoms.push_back(data);
}
注意第二个"尺寸"使用std::array
。当在编译时已知维度的大小时,无论是在内存大小还是缓存友好性方面,此选项都更经济。
演示。
相关文章:
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- For 循环在尝试读取数组 c++ 时程序崩溃
- 从文件中读取数组没有给出正确的值?
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- C++:无法读取数组中的内容
- 读取数组的第一个元素还是第 4000 个元素更快?
- 为什么并行读取数组会导致内存泄漏?
- 读取数组中每个对象的所有键值对
- C++ 从指定范围内的文件中读取数组
- MPI_Get仅从共享内存区域读取数组的第一个元素
- 如何使用指针函数编写/读取数组
- 程序仅读取数组中 6 个值中的 4 个
- ARDUINO LCD:通过读取数组生成导航菜单
- 如何从 Arduino 库中读取数组
- 尝试创建一个读取数组并打印质数的程序
- 因为每个循环都读取数组错误
- 在 Linux 上使用 Getenv 在 C++ 中读取数组环境变量
- 如何在c++中读取数组中的输入文件
- 动态设置数组大小并从文本文件中读取数组值
- 从boost::p roperty_tree读取数组显示为空白