Существуют библиотеки, которые могут помочь вам с сохранением в файлах, но вы можете сделать это и сами.
Если вам нужны данные в двоичном формате в файле, тогда вы можете использовать ostream :: write () функция и для сохранения контейнера, по крайней мере размер должен быть сохранен.
Таким образом, очень специфическая функция будет
void save(const A & a)
{
std::ofstream out_file("path/to/output/file", std::ios::binary);
size_t sz = a.i.size();
out_file.write(reinterpret_cast<const char*>(&sz), sizeof(size_t));
for (const auto& i: a.i) out_file.write(reinterpret_cast<const char*>(&i), sizeof(int));
}
Было бы лучшепередать поток функции и заставить функцию сохранения класса вызвать функцию сохранения контейнера, которая по очереди сохраняет каждую запись следующим образом:
void save(std::ofstream& out, int i)
{
out.write(reinterpret_cast<const char*>(&i), sizeof(int));
}
template<typename E> void save(std::ofstream& out, const std::vector<E>& v)
{
size_t sz = v.size();
out.write(reinterpret_cast<const char*>(&sz), sizeof(size_t));
for (const auto& i: v) save(out, i);
}
void save(std::ofstream& out, const A & a)
{
save(out, a.i);
}
Таким образом, контейнеры с записями любого типа могут сохраняться до тех пор, покаесть функция сохранения.