感謝Mats Petersson爲解釋將向量複製到數組似乎工作。這裏的代碼snipset:如何在C++中正確地將矢量寫入二進制文件?
#include <iostream>
#include <string.h>
#include <vector>
#include <fstream>
using namespace std;
class Student
{
private:
char m_name[30];
int m_score;
public:
Student()
{
}
Student(const Student& copy)
{
m_score = copy.m_score; //wonder why i can use this statment as
strncpy(m_name, copy.m_name, 30); //declare it private
}
Student(const char name[], const int &score)
:m_score(score)
{
strncpy(m_name, name, 30);
}
void print() const
{
cout.setf(ios::left);
cout.width(20);
cout << m_name << " " << m_score << endl;
}
};
int main()
{
vector<Student> student;
student.push_back(Student("Alex",19));
student.push_back(Student("Maria",20));
student.push_back(Student("muhamed",20));
student.push_back(Student("Jeniffer",20));
student.push_back(Student("Alex",20));
student.push_back(Student("Maria",21));
{
Student temp[student.size()];
unsigned int counter;
for(counter = 0; counter < student.size(); ++counter)
{
temp[counter] = student[counter];
}
ofstream fout("data.dat", ios::out | ios::binary);
fout.write((char*) &temp, sizeof(temp));
fout.close();
}
vector<Student> student2;
ifstream fin("data.dat", ios::in | ios::binary);
{
fin.seekg(0, ifstream::end);
int size = fin.tellg()/sizeof (Student);
Student temp2[size];
fin.seekg(0, ifstream::beg);
fin.read((char*)&temp2, sizeof(temp2));
int counter;
for(counter = 0; counter <6; ++counter)
{
student2.push_back(temp2[counter]);
}
fin.close();
}
vector<Student>::iterator itr = student2.begin();
while(itr != student2.end())
{
itr->print();
++itr;
}
return 0;
}
但我客人這種方法將浪費巨大的內存和繁瑣。也許我會考慮用熊貓和其他建議來寫它先生。 感謝大家的回答。
標準提示:用'g ++ -Wall -g'編譯,改進你的代碼,直到沒有給出警告,學會使用'gdb'和'valgrind'來調試它。 –
以及我還沒有得到與終端編譯技術尚未使用。我想我必須以某種方式學習它。謝謝回覆。 – dchochan
然後,學習使用'make'並編寫簡單的'Makefile' –