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