本文不想让学习C++误入到C+class的歧途,主要用到了输入输出操作符重载
用copy算法实现I/O
还可以参考C++标准容器、迭代器、流的使用精要
#include <iostream>
#include <vector>
#include <string>
#include <list>
#include <sstream>
#include <fstream>
#include <iomanip>
using namespace std;
class Person
{
public:
Person(void) {}
Person(const string& _name, int _group, int _age)
:m_name(_name), m_group(_group), m_age(_age) {}
friend ostream& operator<<(ostream& out, const Person& p);
friend istream& operator>>(istream& in, Person& p);
friend bool operator<(const Person& lhs, const Person& rhs);
private:
string m_name;
int m_group;
int m_age;
};
ostream& operator<<(ostream& out, const Person& p)
{
out << setw(2) << p.m_name
<< setw(3) << p.m_group
<< setw(3) << p.m_age;
return out;
}
istream& operator>>(istream& in, Person& p)
{
string s;
getline(in, s);
istringstream iss(s);
iss >> p.m_name >> p.m_group >> p.m_age;
return in;
}
int main()
{
vector<Person> arrayPerson;
arrayPerson.push_back(Person("张三", 1, 22));
arrayPerson.push_back(Person("李四", 1, 22));
arrayPerson.push_back(Person("王二", 2, 23));
arrayPerson.push_back(Person("麻子", 2, 23));
//容器数据写入文件
ofstream fout("person.txt");
for (auto& i : arrayPerson)
{
fout << i << endl;
}
fout.close();
//文件数据到容器
ifstream fin("person.txt");
if (!fin)
{
cout << "can't open file data.txt" << endl;
return -1;
}
list<Person> listPerson;
while (true)
{
Person per;
fin >> per;
if (!fin)
{
break;
}
listPerson.push_back(per);
}
//容器数据到控制台
for (auto& i : listPerson)
{
cout << i << endl;
}
return 0;
}