我目前正在尝试读取并将结构的向量写入二进制文件,这样我就不会花费在预处理上并一直填充它。
我似乎有一些问题这样做......虽然我可以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<<
在这里无效......但为什么?
答案 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上的代码