对于如何将std::vector
写入文件,此问题有很好的答案:Reading and writing a std::vector into a file correctly
就我而言,我有一个数组向量:
vector<array<double, 3> > vec;
我想写入一个文件,以获得具有以下格式的文件,其中值为双精度,第一个数字是向量中的位置,第二个是数组中的位置:
vec0_0 vec0_1 vec0_2 vec1_0 vec1_1 vec1_2 vec2_0 ...
我可以使用......
std::copy(vec.begin(), vec.end(), std::ostreambuf_iterator<char>(FILE));
...或...
size_t sz = vec.size();
FILE.write(reinterpret_cast<const char*>(&vec[0]), sz * sizeof(vec[0]));
...正如上面提到的标量类型问题所提出的那样,或者我需要采用不同的方式,因为vector
中的类型是array
?
答案 0 :(得分:1)
据我所知,std :: array具有连续的存储空间。但是,我不认为保证没有填充。如果它只是一个双[3],它可以开箱即用,但我认为你必须非常仔细地测试并担心容器内的std :: array的可移植性。
事实上,环顾四周有一个系统可以填充的例子。
sizeof(int) = 4;
sizeof( std::tr1::array< int,3 > ) = 16;
sizeof( std::tr1::array< int,4 > ) = 16;
sizeof( std::tr1::array< int,5 > ) = 32;
大概这个填充是实现定义的,或者你可以在标准的某个地方找到它。在任何情况下,我只是迭代事物或使用非stl数组。
我猜这个概念类似于struct
,其中经常引入填充以优化内存访问,但编译器正在优化该填充,并且可以在大多数编译器上关闭{{1语句。据我所知,不是stl容器。