您的位置:首页 > 编程语言 > C语言/C++

C++ Primer 第5版--练习12.2

2017-05-19 20:58 281 查看
练习 12.2:编写你自己的StrBlob类,包含const版本的front和back。

#include <iostream>
#include <vector>
#include <memory>
#include <stdexcept>

using namespace std;

class StrBlob
{
public:
typedef vector<string>::size_type size_type;
StrBlob();
StrBlob(initializer_list<string> i1);
size_type size() const { return data->size(); }
bool empty() const { return data->empty(); }
// 添加和删除元素
void push_back(const string &t) { data->push_back(t);}
void pop_back();
// 元素访问
string& front() const;
string& back() const;
private:
shared_ptr<vector<string>> data;
void check(size_type i, const string &msg) const;
};

StrBlob::StrBlob() : data(make_shared<vector<string>>()) {}
StrBlob::StrBlob(initializer_list<string> i1) :
data(make_shared<vector<string>>(i1)) {}

void StrBlob::check(size_type i, const string &msg) const
{
if (i >= data->size())
throw out_of_range(msg);
}

string& StrBlob::front() const
{
check(0, "front on empty StrBlob");
return data->front();
}

string& StrBlob::back() const
{
check(0, "back on empty StrBlob");
return data->back();
}

void StrBlob::pop_back()
{
check(0, "pop_back on empty StrBlob");
data->pop_back();
}

int main()
{
StrBlob b1;
StrBlob b2 = {"a", "an", "the"};
b1 = b2;
b2.push_back("about");
cout << "Elements number of b1: " << b1.size() << endl
<< "Elements number of b2: " << b2.size();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++Primer 练习