C++ Primer(第5版) 练习 14.23
练习 14.23 为你的StrVec类定义一个initializer_list赋值运算符。
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
cpp
class StrVec{
public:
StrVec(): elements(nullptr), first_free(nullptr), cap(nullptr) {}
StrVec(const StrVec &);
StrVec &operator= (const StrVec &);
~StrVec();
void push_back(const string &);
size_t size() const { return first_free - elements; }
size_t capacity() const { return cap - elements; }
string *begin() const { return elements; }
string *end() const { return first_free; }
void reserve(size_t s);
void resize(size_t s);
StrVec& operator=(std::initializer_list<std::string> li);
private:
Static allocator<string> alloc;
void chk_n_alloc(){ if (size() == capacity()) reallocate(); }
pair<string*, string*>alloc_n_copy(const string*, const string*);
void free();
void reallocate();
string *elements;
string *first_free;
string *cap;
};
StrVec& StrVec::operator=(std::initializer_list<std::string> li){
std::pair<std::string*, std::string*> data = alloc_n_copy(li,begin(), li.end());
elements = data.first;
first_free = cap = data.second;
return *this;
}