您好, 我想存儲二進制一個std::vector<std::vector<int> >
對象MATRIX在文件中。二進制讀/寫任意的std ::矢量<性病::矢量<int>>在C++
out.write((char*)&MATRIX, sizeof(MATRIX));
問題是,只有列維度是固定的。行維度更改。 如果我從二進制文件中讀取對象,僅僅知道尺寸是不夠的,不是嗎?所以,初始化例如的第二矩陣與
std::vector<std::vector<int> > MATRIX2;
for (int i=0;i<column_dim;i++) MATRIX2.push_back (vector<int> (0));
ifstream in(cstr, ios::in | ios::binary);
和讀取對象數據與
ifstream in(cstr, ios::in | ios::binary);
in.read((char*)& MATRIX2, fSize);
是沒有意義的,因爲編譯器不具有關於所保存的數據的結構的線索。 我的問題: 解決這個問題比第二個文件中保存矩陣結構(關於行尺寸的所有信息)有什麼更好的解決方法,讀取它並創建一個MATRIX2和適當的結構,然後用
ifstream in(cstr, ios::in | ios::binary);
in.read((char*)&nn_H_test, fSize);
?
是給定的文件格式?如果不是,也許你想看看http://www.boost.org/doc/libs/1_46_1/libs/serialization/doc/index.html。這應該會讓你很容易存儲和加載int的矩陣。 – mkaes 2011-05-27 12:44:45
擴展我在http://stackoverflow.com/questions/3438132/serialise-and-deserialise-vector-in-binary/3438541#3438541中建議的協議,在每個存儲矩陣前添加一個size_t來指定第一維。 – bobah 2011-05-27 12:46:56
哎喲,你是否試圖在文件上做一個原始的'std :: vector'轉儲?這將*永遠不會*工作,讀回來你會得到一個完全混亂的狀態的對象(唯一正確的事情可能是矢量大小,但指向元素的內部指針將是無效的)。你需要正確的序列化。 – 2011-05-27 12:52:35