C++ Primer 12章习题

来源:互联网 发布:perl from json 编辑:程序博客网 时间:2024/05/21 11:27

12.1.1节练习

#include "stupidsource.h"#include <iostream>using namespace std;class StrBlob{public:    typedef std::vector<std::string>::size_type size_type;    StrBlob();    StrBlob(std::initializer_list<std::string> il);    size_type size() const { return data->size();}    bool empty() const { return data->empty(); }    void push_back(const std::string &t) { data->push_back(t); }    void pop_back();    std::string & front();    std::string & back();    const std::string & front() const;    const std::string & back() const;private:    std::shared_ptr<std::vector<std::string>> data;    void check(size_type i, const std::string & msg) const;};//StrBlob::StrBlob() :data(make_shared<vector<string>>()) {}StrBlob::StrBlob() = default;StrBlob::StrBlob(initializer_list<string> il) :data(make_shared<vector<string>>(il)) {}void StrBlob::check(size_type i, const std::string & msg)const {    if (i >= data->size())        throw out_of_range(msg);}string & StrBlob::front(){    check(0, "front on empty StrBlob");    return data->front();}string & StrBlob::back(){    check(0, "back on empty StrBlob");    return data->back();}const string & StrBlob::front() const{    check(0, "const front on empty StrBlob");    return data->front();}const string & StrBlob::back() const{    check(0, "const back on empty StrBlob");    return data->back();}void StrBlob::pop_back(){    check(0, "pop_back on empty StrBlob");    data->pop_back();}

12.6

#include "stupidsource.h"#include <iostream>using namespace std;vector<int> *first(){    auto p = new vector<int>();    return p;}vector<int>* second(istream &in, vector<int> * vec){    int temp;    while (cin >> temp)        vec->push_back(temp);    return vec;}void third(vector<int> * vec){    for (const auto c : *vec)        cout << c << ends;    cout << endl;    delete vec;    vec=nullptr}int main(){    third(second(cin, first()));    return 0;}

12.7

#include <iostream>#include <fstream>#include <sstream>#include <vector>#include <string>#include <memory>using namespace std;shared_ptr<vector<int>> first(){    return make_shared<vector<int>>();}void second(istream &in,shared_ptr<vector<int>> p){    int temp;    if (p)        while (in >> temp)            p->push_back(temp);}void third(ostream &out, shared_ptr<vector<int>> p){    for (const auto c : *p)        cout << c << ends;    cout << endl;}int main(int argc , char* argv[]){    auto p = first();    second(cin, p);    third(cout, p);    return 0;}

12.23

#include "stupidsource.h"#include <iostream>using namespace std;#pragma warning(disable:4996)int main(){    string s("Hello ");    string t("World");    char *stu = new char[s.length() + t.length() + 1];    strcpy(stu, (s+t).c_str());    cout << stu << endl;    delete [] stu;    return 0;}
原创粉丝点击