Почему vector не копируется через fstream?
Подскажите, пожалуйста, почему не работает такой метод считывания бинарного вектора? Ругается что-то в модуле xmemory, хотя по объемам памяти вроде все совпадает.
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
std::vector<float> testv = { 0.1, 0.2, 0.3 };
std::ofstream teststream("testv.bin", std::ios::binary);
teststream.write((const char*)&testv, testv.size()*sizeof(float));
teststream.close();
std::vector<float> out_v;
std::ifstream teststream2("testv.bin", std::ios::binary);
teststream2.seekg(0, std::ios::end);
int test_size = teststream2.tellg();
teststream2.seekg(0);
out_v.resize(test_size/sizeof(float));
teststream2.read((char*)&out_v, test_size); // тут ошибку выдает
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Я бы записывал сначала число элементов, а потом уже данные - так мы можем в одном файле хранить несколько векторов или чего угодно.
int main() {
std::vector<float> testv = { 0.1, 0.2, 0.3 };
std::ofstream teststream("testv.bin", std::ios::binary);
size_t sz = testv.size();
teststream.write((const char*)&sz, sizeof(sz));
teststream.write((const char*)testv.data(),
testv.size()*sizeof(float));
teststream.close();
std::vector<float> out_v;
std::ifstream teststream2("testv.bin", std::ios::binary);
teststream2.read((char*)&sz, sizeof(sz));
out_v.resize(sz);
teststream2.read((char*)out_v.data(), sz * sizeof(float));
std::cout << (testv == out_v);
}