C++ Primer 第五版 中文版 练习 13.26
来源:互联网 发布:手机视频搞怪软件 编辑:程序博客网 时间:2024/06/03 13:00
C++ Primer 第五版 中文版 练习 13.26
题目: 对上一题中描述的StrBlob类,编写你自己的版本。
StrBlob.h
- #pragma once
- #include <memory>
- #include <vector>
- #include <string>
- #include "StrBlobPtr.h"
- class StrBlob
- {
- public:
- friend class StrBlobPtr;
- 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);
- //拷贝构造函数
- StrBlob(const StrBlob&);
- //拷贝赋值运算符
- StrBlob& operator=(const StrBlob&);
- 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();
- StrBlobPtr begin() { return StrBlobPtr(*this); }
- StrBlobPtr end()
- {
- auto ret = StrBlobPtr(*this, data->size());
- return ret;
- }
- private:
- std::shared_ptr<std::vector<std::string>> data;
- //如果data[i]不合法,抛出一个异常。
- void check(size_type i, const std::string &msg) const;
- };
- #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))
- {
- }
- //定义拷贝构造函数
- StrBlob::StrBlob(const StrBlob &SB) :data(make_shared<vector<string>>(SB.data))
- {
- }
- //定义拷贝赋值运算符
- StrBlob& StrBlob::operator=(const StrBlob &SB)
- {
- auto newdata = shared_ptr<vector<string>>(SB.data);
- data = newdata;
- return *this;
- }
- 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();
- }
0 0
- C++ Primer 第五版 中文版 练习 13.26
- C++ Primer 第五版 中文版 练习 13.26 个人code
- C++ primer 第五版 中文版 练习 10.33
- C++ primer 第五版 中文版 练习 10.37
- C++ primer 第五版 中文版 练习 11.31
- C++ primer 第五版 中文版 练习 12.20
- <<C++ Primer中文版(第五版)>>练习
- c primer plus(第五版)中文版 第五章 编程练习
- C Primer Plus(第五版)中文版勘误
- C primer plus 第五版 中文版 勘误表
- C Primer Plus(第五版)中文版.pdf
- C++Primer 中文版 第五版 第五章课后习题答案
- C++ primer 第五版 中文版 练习 8.13 个人 code
- C++ primer 第五版 中文版 练习 9.5 个人 code
- C++ primer 第五版 中文版 9.2.4 节练习
- C++ primer 第五版 中文版 9.2.5 节练习
- C++ primer 第五版 中文版 9.2.7 节练习
- C++ primer 第五版 中文版 9.3.1 节练习
- 《Qt》part 1 Qwt6.1.0图像库安装
- 【HDU2255】奔小康赚大钱-KM算法
- codeforces 344 B. Print Check解题报告
- .NET(c#)new关键字的三种用法
- Android文字转语音TTS离线程序
- C++ Primer 第五版 中文版 练习 13.26
- RMQ_st
- PAT (Advanced Level) Practise 1018 Public Bike Management (30)
- Android ListView滚动条配置完全解析
- Java-匿名内部类
- 华为真机调试设置输出log
- 数据仓库-国际结算系统
- Android电池监视使用
- 新手如何学会一门编程语言