用c或c++语言,写一个函数将包含vector数组的结构体中的数据读入到文件当中,并从文件中再次次读取数据到相应的结构体
时间: 2024-05-14 19:16:27 浏览: 111
C++ 将一个文件读入数组再读出数组的方法
5星 · 资源好评率100%
以下是用 C++ 语言实现的代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct MyStruct {
vector<int> vec;
};
void writeToDisk(MyStruct myStruct, string fileName) {
ofstream outFile(fileName, ios::out | ios::binary);
if (outFile.is_open()) {
// Write vector size to file
int vecSize = myStruct.vec.size();
outFile.write(reinterpret_cast<char*>(&vecSize), sizeof(vecSize));
// Write vector elements to file
for (int i = 0; i < vecSize; i++) {
outFile.write(reinterpret_cast<char*>(&myStruct.vec[i]), sizeof(myStruct.vec[i]));
}
outFile.close();
} else {
cout << "Error opening file " << fileName << endl;
}
}
MyStruct readFromDisk(string fileName) {
MyStruct myStruct;
ifstream inFile(fileName, ios::in | ios::binary);
if (inFile.is_open()) {
// Read vector size from file
int vecSize;
inFile.read(reinterpret_cast<char*>(&vecSize), sizeof(vecSize));
// Read vector elements from file
for (int i = 0; i < vecSize; i++) {
int element;
inFile.read(reinterpret_cast<char*>(&element), sizeof(element));
myStruct.vec.push_back(element);
}
inFile.close();
} else {
cout << "Error opening file " << fileName << endl;
}
return myStruct;
}
int main() {
MyStruct myStruct;
myStruct.vec.push_back(1);
myStruct.vec.push_back(2);
myStruct.vec.push_back(3);
writeToDisk(myStruct, "data.dat");
MyStruct newStruct = readFromDisk("data.dat");
for (int i = 0; i < newStruct.vec.size(); i++) {
cout << newStruct.vec[i] << " ";
}
cout << endl;
return 0;
}
```
在这个示例中,我们定义了一个结构体 `MyStruct`,其中包含一个 `vector` 数组。我们通过 `writeToDisk` 函数将 `MyStruct` 写入到文件 `data.dat` 中,然后通过 `readFromDisk` 函数从文件中读取数据并返回一个新的 `MyStruct` 对象。
在 `writeToDisk` 函数中,我们首先打开文件,并将 `vector` 数组的大小写入文件。然后,我们逐个将 `vector` 数组中的元素写入到文件中。在 `readFromDisk` 函数中,我们打开文件并读取 `vector` 数组的大小。然后,我们逐个读取 `vector` 数组中的元素,并将其添加到一个新的 `vector` 数组中,最后返回一个新的 `MyStruct` 对象。
阅读全文