我们使用迭代器来进行字符串的遍历:

代码语言: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
     

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐