您现在的位置是:首页 >其他 >【C++】string的模拟实现网站首页其他
【C++】string的模拟实现
简介【C++】string的模拟实现
目录
前言
上一篇文章中讲了如何使用string,这次讲讲 string 的模拟实现。由于 string 的接口实在是太多了,这里只实现一些常用的接口。
话不多说,我们直接开始。
结构解析
?我们知道,string 的本质还是一个顺序表,只不过限定了里面存的是字符。我们模拟实现主要还是为了学习设计容器的思想,今天这个 string 就不写成类模板了,因此现在这个类的成员变量基本上就确定下来了。我还将其写到了自己的命名空间中避免冲突。
namespace Alpaca
{
class String
{
public:
private:
char* _str; //字符串
size_t _sz; //大小
size_t _capacity; //容量
static const size_t npos;
};
static const size_t npos = -1;
}
?虽然 npos 是静态成员变量,但是加了 const 之后便可以在类中初始化。注意: 静态成员变量只有整型才能在类中初始化。
?此外数据的大小与容量不可能是负数,便可以将其设置为无符号整数。
构造与析构
构造
?在 string 中支持无参构造,还支持传字符串构造。我们不妨设置一个缺省值将二者结合起来。
String(const char* ptr = "")
:_sz(strlen(ptr))
{
_capacity = _sz == 0 ? 3 : _sz; //若是无参构造初始容量为3
_str = new char[_capacity + 1]; //给'