Страницы

Поиск по вопросам

среда, 17 июля 2019 г.

Как записать двумерный вектор в двоичный файл?

Предположим, что у меня имеется какой-то двумерный вектор:
std::vector> main_vector; std::vector temp_vector;
for (std::size_t i = 0; i < 5; i++) temp_vector.push_back(i); for (std::size_t i = 0; i < 5; i++) main_vector.push_back(temp_vector);
Как записать его в двоичный файл? Соответственно, размерность неизвестна. Знаю, что стандартным образом как с массивами не прокатит.
bin_file.open("test.txt", std::ios::out | std::ios::binary); bin_file.write((char *)&main_vector, sizeof(main_vector)); //не сработает


Ответ

Решение вот (проверено):
std::ofstream bin_file; std::vector> main_vector; main_vector.resize(5);
const int n = 5; const int m = 5; for (std::size_t i = 0; n < 5; i++) { for (std::size_t j = 0; m < 5; j++) { main_vector[i].push_back(j); } } //демонстрация в поток вывода элементов нашего вектора for (int i {}; i < n; ++i) { for (int j {}; j < m; ++j) { std::cout << main_vector[i][j] << ' '; } } std::cout << std::endl; //запись в файл (расширение УКАЗАННО ВОПРОШАЮЩИМ!) bin_file.open("test.txt", std::ios::out | std::ios::binary); for (int i{}; i < main_vector.size(); ++i) { bin_file.write((char *)&main_vector[i][0], main_vector[i].size() * sizeof(main_vector[i][0])); } bin_file.close();
Ну а проверить что у вас вывелось в файл можно следующим образом:
char array[n * m * sizeof(main_vector[0][0])];
read_file.open("test.txt", std::ios::in | std::ios::binary); read_file.read(array, sizeof(array)); read_file.close();
int *arr = reinterpret_cast(array); for (int i {}; i < n * m; ++i) { std::cout << *arr << ' '; ++arr; }
return 0; }

Комментариев нет:

Отправить комментарий