模仿vector<string>
Strvec.h
class StrVec
{
public:
StrVec():elements(nullptr),first_free(nullptr),cap(nullptr){}//构造函数
StrVec(const StrVec&);//拷贝构造
StrVec& operator=(const StrVec&);//赋值运算符
~StrVec();//析构函数
void push_back(const std::string&);//向尾部添加字符串
size_t size() const {return first_free - elements; }//返回尺寸
size_t capacity() const {return cap - elements; }//返回容量
std::string *begin() const {return elements; }//返回首迭代器
std::string *end() const {return first_free; }//返回尾后迭代器
std::string *begin(){return elements; }
std::string *end(){return first_free; }
private:
//allocator对象,用于分配string空间
static std::allocator<std::string> alloc;
void chk_n_alloc()//检查是否分配空间
{ if((size() == capacity())) reallocate(); }//如果空间已满,重新分配空间
//用于分配空间
std::pair<std::string*, std::string*> alloc_n_copy(const std::string*, const std::