Почему 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);
    }
→ Ссылка