#include<cstring>
#include<vector>
#include<memory>
#include<stdexcept>
#include<iostream>
using namespace std;
class strBlob {
public:
typedef vector<string>::size_type size_type;
strBlob();
strBlob(initializer_list<string>il);
size_type size() const { return data->size(); }
bool empty()const { return data->empty(); }
//add & delete
void push_back(const string& s) { data->push_back(s); }
void pop_back();
//access
string& front();
string& back();
private:
//使用标准库容器vector来管理元素string
//为实现数据共享,使用shared_ptr来管理动态分配的vector
//若直接使用vector,离开作用域时,vector将被销毁,数据也被销毁
shared_ptr<vector<string>>data;
//如果data[i]不合法,抛出异常。元素访问成员函数在访问成员之前要检查元素是否存在
//msg将参数传递给异常处理程序
void check(size_type i, const string& msg)const;
};
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);
}
void strBlob::pop_back() {
check(0, "pop_back on empty strBlob");
return data->pop_back();
}
string& strBlob::front() {
check(0, "front on empty strBlob");
return data->front();
}
string& strBlob::back() {
check(0, "back on empty strBlob");
return data->back();
}
smart_ptr str_Blob
最新推荐文章于 2024-07-24 11:32:27 发布