Запись и чтение 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);
→ Ссылка