我有一个文本文件,如下所示:
January 35 45
February 45 55
etc...
我正在尝试通读文件,并将每个月添加到字符串数组,然后将每个随后的整数添加到二维数组中。
我有一个months []数组和一个temps [] []数组。
我正在尝试类似
int size = 0;
while(!file.eof()) {
file >> months[size];
size++;
}
我不知道如何将两个整数加到int数组中...
这是一个类,令人惊讶,特别是要求从文件中读取数据,并将月份插入数组,然后将后面的两个整数插入二维数组。
我们还没有遍历结构或向量。
答案 0 :(得分:2)
不要使用数组。具有结构的模型。
this.$apollo.mutate
接下来,添加一种输入结构的方法:
struct Month_Record
{
std::string month_name;
int value_1;
int value_2;
};
您输入的内容将变为:
struct Month_Record
{
//... same as above
friend std::istream& operator>>(std::istream& input, Month_Record& mr);
}
std::istream& operator>>(std::istream& input, Month_Record& mr)
{
input >> mr.month_name;
input >> mr.value_1;
input >> mr.value_2;
return input;
}
您可以像访问数组一样访问数据库:
std::vector<Month_Record> database;
Month_Record mr;
while (input_file >> mr)
{
database.push_back(mr);
}
该模型的一个不错的功能是您可以将记录放在一个缓存行中。对于并行阵列,处理器可能必须重新加载数据高速缓存以从其他阵列获取数据(因为可能必须将整个阵列加载到高速缓存中)。
答案 1 :(得分:0)
int size = 0;
while(size < MAX_ARRAY_LENGTH && // prevent overflow.
// Will stop here if out of space in array
// otherwise && (logical AND) will require the following be true
file >> months[size] // read in month
>> temps[size][0] // read in first temp
>> temps[size][1]) // read in second temp
{ // if the month and both temperatures were successfully read, enter the loop
size++;
}
MAX_ARRAY_LENGTH
是一个常量,用于定义可以放置在数组中的最大月份数。
>>
返回对正在读取的流的引用,因此您可以将操作链接在一起,并在读取完成后利用流的operator bool
。如果流仍处于良好状态,则operator bool
将返回true。
逻辑看起来像
loop
if array has room
read all required data from stream
if all data read
increment size
go to loop.
您可能需要在循环结束后进行测试,以确保已读取所有数据。如果您要读取文件的末尾,则类似if (file.eof())
的文件将确保已读取整个文件。如果您希望获得一年的数据价值,请if (size == ONE_YEAR)
,其中ONE_YEAR
是一个常数,用于定义一年中的月份数。