在C++ - The Complete Reference
中,作者在展示了如何实现自定义C++字符串类后给了我们一个挑战。摘录:
我在这里了解基本概念,但是在实现它时遇到了麻烦。我应该为每个字符或类似内容执行std::vector < char >
和push_back
吗?字符串操作呢?需要一些帮助。示例代码将被感激地接受,或者您可以解释我如何能够实现这一点。
最佳答案
是的,std::vector<char>
听起来是个好主意。这样可以避免编写自定义析构函数,复制构造函数和复制赋值运算符的麻烦。加上所有迭代器成员函数(begin
,end
和co。)都可以委托(delegate)给std::vector<char>
版本。
当然,这是我将如何重载operator+=
和operator+
作为字符串类型:
class StrType
{
std::vector<char> vec;
public:
// ...
StrType& operator+=(const StrType& rhs)
{
vec.insert(vec.end(), rhs.vec.begin(), rhs.vec.end());
return *this;
}
};
StrType operator+(StrType lhs, const StrType& rhs)
{
lhs += rhs;
return lhs;
}
可能是
operator+
的更有效的版本,但是您可以自己弄清楚。