保存和加载结构体数组的最佳实践是使用文件输入输出(File I/O)操作。以下是一个示例解决方法:
保存结构体数组:
#include
#include
struct MyStruct {
int id;
std::string name;
};
void saveStructArray(const std::string& filename, const MyStruct* array, int size) {
std::ofstream file(filename, std::ios::binary);
if (file.is_open()) {
file.write(reinterpret_cast(&size), sizeof(size));
for (int i = 0; i < size; i++) {
file.write(reinterpret_cast(&array[i]), sizeof(array[i]));
}
file.close();
} else {
std::cout << "Unable to open file for writing!" << std::endl;
}
}
int main() {
MyStruct structs[3] = {
{1, "John"},
{2, "Jane"},
{3, "Alice"}
};
saveStructArray("data.bin", structs, 3);
return 0;
}
加载结构体数组:
#include
#include
struct MyStruct {
int id;
std::string name;
};
void loadStructArray(const std::string& filename, MyStruct*& array, int& size) {
std::ifstream file(filename, std::ios::binary);
if (file.is_open()) {
file.read(reinterpret_cast(&size), sizeof(size));
array = new MyStruct[size];
for (int i = 0; i < size; i++) {
file.read(reinterpret_cast(&array[i]), sizeof(array[i]));
}
file.close();
} else {
std::cout << "Unable to open file for reading!" << std::endl;
array = nullptr;
size = 0;
}
}
int main() {
MyStruct* loadedArray;
int loadedSize;
loadStructArray("data.bin", loadedArray, loadedSize);
if (loadedArray != nullptr) {
for (int i = 0; i < loadedSize; i++) {
std::cout << "ID: " << loadedArray[i].id << ", Name: " << loadedArray[i].name << std::endl;
}
delete[] loadedArray;
}
return 0;
}
上述代码示例中的saveStructArray
函数将结构体数组保存到二进制文件中,首先将数组的大小写入文件,然后逐个写入结构体的数据。loadStructArray
函数从二进制文件中加载结构体数组,首先读取数组的大小,然后动态分配内存,并逐个读取结构体的数据。
需要注意的是,保存和加载结构体数组时要确保结构体的成员没有指针或其他需要特殊处理的数据类型,否则可能会导致数据损坏或无法正确加载。在实际应用中,可能需要对结构体数组进行序列化和反序列化处理,以便保存和加载更复杂的数据结构。
上一篇:保存和加载检查点 PyTorch
下一篇:保存和加载Keras模型