C++ primer 第五版 中文版 练习 12.2 个人code

来源:互联网 发布:node.js python 编辑:程序博客网 时间:2024/05/18 03:20

C++ primer 第五版 中文版 练习 12.2

题目:编写你自己的StrBlob类,包含const 版本的 front 和 back 。

答:

StrBlob.h  //定义类,声明相关函数

#include <memory>#include <vector>#include <string>class StrBlob{public:typedef std::vector<std::string>::size_type size_type;//  下面这个等同于上面这个。//using size_type = std::vector<std::string>::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 重载 元素访问。const std::string& front() const;const std::string& back() const;private:std::shared_ptr<std::vector<std::string>> data;//如果data[i]不合法,抛出一个异常。void check(size_type i, const std::string &msg) const;};


StrBlob.cpp  //定义相关函数

#include "StrBlob.h"using namespace std;//定义构造函数StrBlob::StrBlob() :data(make_shared<vector<string>>()){}StrBlob::StrBlob(initializer_list<string> il) : data(make_shared<vector<string>>(il)){}void StrBlob::check(size_type i, const 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();}void StrBlob::pop_back(){check(0, "pop_back on empty StrBlob");data->pop_back();} const string& StrBlob::front() const{check(0, "front on empty StrBlob");return data->front();}const string& StrBlob::back() const {check(0, "back on empty StrBlob");return data->back();}



0 0
原创粉丝点击