21xrx.com
2024-12-22 22:53:27 Sunday
登录
文章检索 我的文章 写文章
C++实现文件数据存入对象数组的方法
2023-07-11 05:28:27 深夜i     --     --
C++ 文件数据 对象数组 存储方法

C++是一种面向对象的程序设计语言,可以进行文件的读写操作。当我们需要读取一个文件中的数据并存储到对象数组中时,可以使用C++提供的文件流和STL容器来实现。

1. 打开文件

首先需要打开文件,并将文件流赋值给一个变量。文件流可以使用fstream库中的ifstream类实现。在使用ifstream打开文件时,需要传入需要打开的文件名和打开方式。打开方式有两种,一种是二进制方式,另一种是文本方式。

示例代码:


#include <fstream>

#include <vector>

using namespace std;

int main()

{

  // 打开文件

  ifstream infile("data.txt", ios::in);

  if(!infile) // 判断文件是否打开成功

  

    cout << "文件打开失败" << endl;

    return 0;

  

  ......

}

2. 读取文件数据

读取文件数据需要使用文件流,依次读取文件中的每个数据项,并将其存储到一个数组中。此处可以使用STL容器vector实现,代码如下:


#include <iostream>

#include <fstream>

#include <vector>

using namespace std;

class Data

{

public:

  int id;

  string name;

  Data(){}

  Data(int i, string n) : id(i), name(n) {}

};

int main()

{

  ifstream infile("data.txt", ios::in);

  if(!infile) // 判断文件是否打开成功

  

    cout << "文件打开失败" << endl;

    return 0;

  

  vector<Data> data_array; // 定义一个vector数组

  string line;

  while(getline(infile, line)) // 逐行读取文件

  {

    int id;

    string name;

    istringstream iss(line); // 将字符串转换成流

    if(!(iss >> id >> name)) // 解析一行数据

      break;

    Data item(id, name); // 创建一个对象

    data_array.push_back(item); // 加入到vector数组中

  }

  infile.close(); // 关闭文件

  return 0;

}

在上述代码中,我们定义了一个Data类,该类有两个成员变量id和name。我们利用vector数组存储Data对象,使用while循环逐行读取文件,并将每一行数据解析成id和name,然后创建一个Data对象并存储到vector数组中。

3. 存储数据到对象数组

读取文件数据并存储到vector数组后,我们可以将其转换成普通数组,然后可以使用普通数组来操作数据。

示例代码:


#include <iostream>

#include <fstream>

#include <vector>

using namespace std;

class Data

{

public:

  int id;

  string name;

  Data(){}

  Data(int i, string n) : id(i), name(n) {}

};

int main()

{

  ifstream infile("data.txt", ios::in);

  if(!infile) // 判断文件是否打开成功

  

    cout << "文件打开失败" << endl;

    return 0;

  

  vector<Data> data_array; // 定义一个vector数组

  string line;

  while(getline(infile, line)) // 逐行读取文件

  {

    int id;

    string name;

    istringstream iss(line); // 将字符串转换成流

    if(!(iss >> id >> name)) // 解析一行数据

      break;

    Data item(id, name); // 创建一个对象

    data_array.push_back(item); // 加入到vector数组中

  }

  infile.close(); // 关闭文件

  int count = data_array.size(); // 获取vector数组的大小

  Data* array = new Data[count]; // 创建一个普通数组

  for(int i = 0; i < count; i++) // 将vector数组转换成普通数组

    array[i] = data_array[i];

  // 使用普通数组来操作数据

  for(int i = 0; i < count; i++)

    cout << array[i].id << ' ' << array[i].name << endl;

  delete[] array; // 删除数组

  return 0;

}

在上述代码中,我们使用普通数组Data* array来存储vector数组中的全部Data对象,并对其进行操作。操作完成后,需要删除普通数组。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复