【C++】string类--常见接口及其模拟实现
我们使用迭代器来进行字符串的遍历:代码语言:javascriptAI代码解释。
·
我们使用迭代器来进行字符串的遍历:
代码语言:javascript
AI代码解释
int main()
{
s::string s1("Hello World");
s::string::iterator it = s1.begin();
while (it != s1.end())
{
cout << *it << "";
it++;
}
}
PS:这个地方要注意的是要注意使用的是C++string类中的迭代器还是我们自定义类string中的迭代器。

1.4. 范围for
for的使用:
代码语言:javascript
AI代码解释
for (auto e : s1)
{
cout << e << " ";
}

其实范围for的底层机制同样是一个迭代器,我们可以通过下面的方式进行验证,我们将迭代器给注释掉,我们来看一下发生什么:

2. 增
2.1. push_back

可以看到,push_back的作用是将一个字符添加到原有字符串后面,具体步骤:
- 我们先要判断时候需要扩容:如果size==capacity,说明满了。扩容:开辟一个两倍内存的新空间,然后原有字符串拷贝至新空间,释放原空间
- 添加的新字符应该放在size的位置
- 然后处理“\0”即可
2.2. 重载+=(char ch)
但是我们在日常写代码中并不会经常使用push_back,而是使用 += ,所以我们来重载一下 += ,它的实现中也可以服用push_back:
代码语言:javascript
AI代码解释
string& operator+=( char ch)
{
push_back(ch);
return *this;
}
2.3. appand

这里可以注意到,前面两个接口都是将单个字符添加到已有字符串结尾,而这个接口是将一个字符串添加到原来的字符串,步骤如下:
- 首先需要考虑要不要扩容,而且这里的扩容不能只是简单地将空间变为两倍,因为这样并不能保证空间足够。应该是将原字符串长度和新添加字符串长度相加,这样得到的空间就一定能满足要求,这里我们使用reserve函数(见下面的5.1)
- 然后更新 _size
更多推荐



所有评论(0)