请教怎么将包含vector类型的struct写入文件,然后再读出
请问如何将包含vector类型的struct写入文件,然后再读出?
如题了。
我用fstream读写,但是因为struct里面有vector<string>,整个struct的长度是不一样的,该怎么读写呢?
直接用read()会报错
琢磨半天了,谢谢!
------解决方案--------------------
可以用操作符重载。比如
struct A
{
vector<string> str_vec;
}
ostream & operator << (ostream& out, const A& a)
{
copy(a.str_vec.begin(), a.str_vec.end(), ostream_iterator<string>(out, " "));
return out;
}
istream & operator >> (istream& in, A& a)
{
copy(istream_iterator<string>(in), istream_iterator<string>(), back_inserter(a.str_vec));
return in;
}
int main(void)
{
fstream file("hello.txt");
A a;
...
file >> a;
file << a;
...
return 0;
}
------解决方案--------------------
struct A
{
vector <string > str_vec;
}
ostream & operator < < (ostream& out, const A& a)
{
out<<a.str_vec.size()<<'\n';
copy(a.str_vec.begin(), a.str_vec.end(), ostream_iterator <string>(out, "\n"));
return out;
}
istream & operator > > (istream& in, A& a)
{
string str;
getline(in,str);
int line=atoi(str.c_str());
vector<string> strV;
strV.reserve(line);
for(int i=0;i<line;++i){
getline(in,str);
strV.push_back(str);
}
a.str_vec.swap(strV);
return in;
}
如题了。
我用fstream读写,但是因为struct里面有vector<string>,整个struct的长度是不一样的,该怎么读写呢?
直接用read()会报错
琢磨半天了,谢谢!
------解决方案--------------------
可以用操作符重载。比如
struct A
{
vector<string> str_vec;
}
ostream & operator << (ostream& out, const A& a)
{
copy(a.str_vec.begin(), a.str_vec.end(), ostream_iterator<string>(out, " "));
return out;
}
istream & operator >> (istream& in, A& a)
{
copy(istream_iterator<string>(in), istream_iterator<string>(), back_inserter(a.str_vec));
return in;
}
int main(void)
{
fstream file("hello.txt");
A a;
...
file >> a;
file << a;
...
return 0;
}
------解决方案--------------------
struct A
{
vector <string > str_vec;
}
ostream & operator < < (ostream& out, const A& a)
{
out<<a.str_vec.size()<<'\n';
copy(a.str_vec.begin(), a.str_vec.end(), ostream_iterator <string>(out, "\n"));
return out;
}
istream & operator > > (istream& in, A& a)
{
string str;
getline(in,str);
int line=atoi(str.c_str());
vector<string> strV;
strV.reserve(line);
for(int i=0;i<line;++i){
getline(in,str);
strV.push_back(str);
}
a.str_vec.swap(strV);
return in;
}