[2018年4月24号]C++ primer 课后练习 第八章 IO 第九章 顺序容器

8.7:

是考察ofstream操作类似于:

    ifstream is("test_2.txt");
    ofstream os("test_w_2.txt");
    string tmpStr;
    while (is >> tmpStr && !is.eof()) {
        cout << tmpStr << ends;
        os << tmpStr << endl;
    }

8.8

os打开文件时候使用app追加模式

8.9

istringstream& read(istringstream& is){
    string i;
    while (is>> i)
    {
        cout << i ;
    }
    is.clear();
    return is;
}

8.10

int main() {
    ifstream is("test_2.txt");
    string tmpStr;
    vector<string > strVec;
    while (getline(is, tmpStr)){
        strVec.push_back(tmpStr);
    }
    string word;
    istringstream iss;
    for(auto strAuto : strVec){
        istringstream iss(strAuto);
        while (iss >> word) {
            cout << word<<ends;
        }
    }
    for (;;);
    return 0;
}

8.11:

    string line,word;
    vector<PersonInfo> people;
    istringstream record;
    while(getline(is,line)){
        PersonInfo info;
        record.clear();
        record.str(line);
        record >> info.name;
        while(record >> word)
            info.phones.push_back(word);
        people.push_back(info);
    }

8.12

每个人情况不一样,甚至没有手机号码,无法针对所有人进行统一匹配


8.13

    ifstream is("test_2.txt");
    string line,word;
    vector<PersonInfo> people;
    while(getline(is,line)){
        PersonInfo info;
        istringstream record(line);
        record >> info.name;
        while(record >> word)
            info.phones.push_back(word);
        people.push_back(info);
    }

    for(const auto &entry:people){
        ostringstream formatted, badNums;
        for(const auto &nums:entry.phones){
            if(!valid(nums)){
                badNums << " "<<nums;
            }else{
                formatted << " " format(nums);
            }
        }
        if (badNums.str().empty()) {
            cout << entry.name << " " << formatted.str() << endl;
        }else{
            cerr << "input error: " << entry.name << "invalid numbers(s)" << badNums.str() << endl;
        }
    }

8.14:

entry和nums都是数据源的值,我们无需改变他们所以加上const,加上引用后可以使传递更快,加快程序运行效率

9.1

a.vector

b.deque

c.list

9.2

list<deque<int> > dal;

9.3

它们只想同一个容器中的元素,或者是容器最后一个元素之后的位置

我们可以通过反复递增begin来到大end,换句话说,end不在begin之前

9.4

bool findNumInVec(vector<int > vec, int theKeyNum){
    for (vector<int >::iterator it = vec.begin(); it != vec.end(); it++) {
        if (*it == theKeyNum)
            return true;
    }
    return false;
}

9.5

int findNumInVec(vector<int > vec, int theKeyNum){
    for (vector<int >::iterator it = vec.begin(); it != vec.end(); it++) {
        if (*it == theKeyNum)
            return *it;
    }
    return theKeyNum+1;
}

9.6

iter1没有改变指针的位置,会导致循环不会跳出

9.7

vector<int>::size_type

9.8

list<string>::iterator

list<string>::const_iterator

9.9

一个可修改一个不可修改

9.10

it1 : vector<int>::iterator

it2:

it3:

it4:

vector<int>::const_iterator

vector<int>:::iterator
vector<int>:::iterator

猜你喜欢

转载自blog.csdn.net/qq_22478401/article/details/80059506