如何读取和写入文件的结构向量?

时间:2017-12-06 12:45:23

标签: c++ file vector struct fstream

我目前正在尝试读取并将结构的向量写入二进制文件,这样我就不会花费在预处理上并一直填充它。

我似乎有一些问题这样做......虽然我可以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/urCHoETdh7vE3xlE

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

1 个答案:

答案 0 :(得分:1)

如果要直接使用流运算符,则必须为结构重载它。像这样:

#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;
}

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

Here是wandbox上的代码