Friday, 15 March 2013

c++11 - C++ vector binary I/O -



c++11 - C++ vector binary I/O -

hi: trying write , read 2d vector in binary mode. but, not getting right output. c++ code follow. kind of help appreciated.

#include <iostream> #include <fstream> #include <string> #include <vector> #include <complex> using namespace std; int main() { typedef unsigned uint; typedef complex<double> type; uint size=10; uint datasize=size*size*sizeof(type); vector<vector<type> > x(size, vector<type> (size)); for(uint = 0 ; < x.size() ; ++i ){ for(uint j = 0 ; j < x.size() ; ++j ){ x[i][j]={(double)i, (double)j};}} for(uint = 0 ; < x.size() ; ++i ){ for(uint j = 0 ; j < x.size() ; ++j ){ cout << x[i][j] << ' ';} cout << std::endl;} ofstream o("out.bin",ios_base::binary); o.write( (char *)(&x[0][0]), datasize ); o.clear(); o.close(); cout<<"**************************************"<<std::endl; vector<vector<type> > y(size, vector<type> (size)); streampos begin, end; ifstream in("out.bin",ios_base::binary); in.read( (char *)(&y[0][0]), datasize); in.clear(); in.close(); for(uint = 0 ; < y.size() ; ++i ){ for(uint j = 0 ; j < y.size() ; ++j ){ cout << y[i][j] << ' ';} cout << std::endl;} homecoming 0; }

output

(0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9) (1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9) (7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9) (8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9) (9,0) (9,1) (9,2) (9,3) (9,4) (9,5) (9,6) (9,7) (9,8) (9,9) ************************************** (0,0) (0,1) (0,2) (0,3) (0,4) (0,5) (0,6) (0,7) (0,8) (0,9) (1,0) (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (2,0) (2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (3,0) (3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (4,0) (4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (5,0) (5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (6,0) (6,1) (6,2) (6,3) (6,4) (6,5) (6,6) (6,7) (6,8) (6,9) (7,0) (7,1) (7,2) (7,3) (7,4) (7,5) (7,6) (7,7) (7,8) (7,9) (8,0) (8,1) (8,2) (8,3) (8,4) (8,5) (8,6) (8,7) (8,8) (8,9) (9,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0)

surprising worked did - lucky in way memory of sub-vectors allocated.

instead of

o.write( (char *)(&x[0][0]), datasize );

and

in.read( (char *)(&y[0][0]), datasize);

you'll need loop on sub-vectors of x , y , write/read them separately; e.g.

for (size_t = 0; < size; ++i) { o.write( (char *)(&x[i][0]), size*sizeof(type) ); }

and

for (size_t = 0; < size; ++i) { o.read( (char *)(&y[i][0]), size*sizeof(type) ); }

only sub-vectors have memory contiguous. these loops go through sub-vectors of each "2-d array" , save them in order, , read them in order.

c++ c++11

No comments:

Post a Comment