Может быть, самая простая идея: вместо того, чтобы регистрировать отдельные файлы, почему бы не записать все в базу данных SQLite ?
Учитывая следующую структуру таблицы:
create table iterations (
id integer not null,
iteration integer not null,
value text not null
);
В начале программы подготовьте утверждение один раз:
sqlite3_stmt *stmt;
sqlite3_prepare_v3(db, "insert into iterations values(?,?,?)", -1, SQLITE_PREPARE_PERSISTENT, &stmt, NULL);
Здесь вопросительные знаки являются заполнителями для будущих значений.
После каждой итерации симуляции вы можете пройти задайте вектор и выполните stmt
несколько раз, чтобы фактически вставить строки в базу данных, например:
for (int i = 0; i < objects.size(); i++) {
sqlite3_reset(stmt);
// Fill in the three placeholders and execute the query.
sqlite3_bind_int(stmt, 1, i);
sqlite3_bind_int(stmt, 2, current_iteration); // Could be done once, but here for illustration.
std::string state = objects[i].get_state();
sqlite3_bind_text(stmt, 3, state.c_str(), state.size(), SQLITE_STATIC); // SQLITE_STATIC means "no need to free this"
sqlite3_step(stmt); // Execute the query.
}
Затем можно легко запросить историю каждого отдельного объекта с помощью инструмента командной строки SQLite. или любой менеджер баз данных, который понимает SQLite.