练习8.13:重写本节的电话号码程序,从一个命名文件而非cin读取数据?
答: 见练习8.13.cpp
练习8.14:我们为什么将entry和nums定义为const auto&?
答:entry与nums分别与people和people.phones相对应,是它们引用。而entry和nums虽然参与运算,但不能被拷贝以及赋值(保证原有输入的数据不变),因此是const auto&.
练习8.13
/*
*练习8.13
*日期:2015/7/23
*问题描述:练习8.13:重写本节的电话号码程序,从一个命名文件而非cin读取数据?
*说明:继续做
*作者:Nick Feng
*邮箱:nickgreen23@163.com
*/
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
struct PersonInfo{
string name;
vector<string> phones;
};
int main()
{
string line, word;
vector<PersonInfo> people;
ifstream in("person_data.txt");
ofstream out("person_data_save2.txt");
while(getline(in,line))
{
PersonInfo info;
istringstream record(line);
record >> info.name;
out << info.name << " "; //测试用
cout << info.name << endl;
while(record >> word)
{
info.phones.push_back(word);
out << word << " ";//测试用
cout << word << endl;
}
out << endl;
people.push_back(info);
}
}
person_data.txt
Nick 123456 324321
Tom 23456 212111
Jack 123 456
Marry 231
person_save_data2.txt
Nick 123456 324321
Tom 23456 212111
Jack 123 456
Marry 231