Предположим, что у меня имеется какой-то двумерный вектор:
std::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
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
return 0;
}
Комментариев нет:
Отправить комментарий