Запись и чтение std::list в бинарном формате
В листе содержится std::pair<int, bool>. Как такой лист записать в файл и считать из него?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Примерный набросок:
list<pair<int,bool>> lst;
// Запись
ofstream out(filename,ios::binary);
for(const auto& x: lst)
out.write((char*)&x,sizeof(x));
// Чтение
ifstream in(filename,ios::binary);
pair<int,bool> x;
while(in.read((char*)&x,sizeof(x)))
lst.push_back(x);
Так сработает, потому что pair<int,bool> — просто структура от POD. Для pair<string,bool> это уже работать не станет.
И не забудьте все необходимые проверки :)
С vector в этом случае еще проще.
vector<pair<int,bool>> lst;
// Запись
ofstream out(filename,ios::binary);
out.write((char*)lst.data(),sizeof(pair<int,bool>)*lst.size());
// Чтение
ifstream in(filename,ios::binary);
size_t count = in.seekg(0,ios::end).tellg()/sizeof(pair<int,bool>);
lst.resize(count);
in.seekg(0);
in.read((char*)lst.data(),sizeof(pair<int,bool>)*count);