如何读写结构向量到文件

How to read and write a vector of struct to a file?

本文关键字:结构 向量 文件 读写 何读写      更新时间:2023-10-16

我当前正在尝试读取并写入构造向量到二进制文件,以至于我不花在预处理上,以始终填充它。

我似乎遇到了一些问题...尽管我可以std::ofstream,但事实并非如此。

#include <iostream>
#include <cstdlib>
#include <vector>
#include <fstream>
struct element
{
    std::vector<std::pair<int, int>> coord;
    element(std::vector<std::pair<int, int>> set_coord )
    {
         coord = set_coord;
    }
};
int main()
{
    std::cout << "Hello, Wandbox!" << std::endl;
    std::vector<element> matrix;
    std::ofstream datafile;
    datafile.open("path/to/file");
    datafile<<matrix;
    datafile.close();
}

https://wandbox.org/permlink/churchoetdh7ve3xle

我收到一条错误消息,即operator<<在这里无效...为什么?

如果要直接使用流操作员,则必须为结构超载。这样的东西:

#include <iostream>
#include <vector>
struct MyStruct {
    using coordinates = std::vector<std::pair<int, int>>;
    MyStruct(coordinates c) : c(c) {};
    friend std::ostream& operator<<(std::ostream& os, const MyStruct& m) {
        for (const auto &pair : m.c) {
            os << "First: " << pair.first << "; Second: " << pair.second;
        }
        return os;
    }
private:
    coordinates c;
};
class MyVector {
public:
    MyVector(std::initializer_list<MyStruct> list) : elements(list) {}
    friend std::ostream& operator<<(std::ostream& os, const MyVector& m) {
        for (const auto &ms : m.elements) {
            os << ms << std::endl;
        }
        return os;
    }
private:
    std::vector<MyStruct> elements;
};
int main()
{
    MyStruct m1({{1, 2}});
    MyStruct m2({{3, 4}});
    MyVector vec({m1, m2});
    std::cout << vec << std::endl;
    return 0;
}

我已经编辑了代码,因此它确实可以与向量作为成员使用。在第二个编辑中,我使用自己的(非常基本的)向量实现

这是wandbox上的代码