string类
类对象的访问以及遍历操作
operator[]
由于string类的底层是连续的空间,因此可以实现使用[]+下标来访问并修改string对象的内容,需要注意一下的是最好需要重载一个const类型的成员函数,针对传入类型为const变量时使用。
char& operator[](size_t pos)//模拟实现[]
{
assert(pos < _size);
return _str[pos];
}
const char& operator[](size_t pos) const//模拟实现[]
{
assert(pos < _size);
return _str[pos];
}
访问和遍历string对象操作
for+[]下标访问
void Teststring()
{
string s("hello Bit");
// 3种遍历方式:
// 需要注意的以下三种方式除了遍历string对象,还可以遍历是修改string中的字符,
// 另外以下三种方式对于string而言,第一种使用最多
// 1. for+operator[]
for (size_t i = 0; i < s.size(); ++i)
{
cout << s[i] << " ";
}
}
迭代器访问
void Teststring()
{
string s("hello Bit");
// 2.迭代器
string::iterator it = s.begin();
while (it != s.end())
{
cout << *it << " ";
++it;
}
cout<<endl;
string::reverse_iterator rit = s.rbegin();
while (rit != s.rend())
{
cout << *rit << " ";
rit++;
}
}
可以使用反向迭代器进行逆序访问
范围for
void Teststring()
{
string s("hello Bit");
//3.范围for
for (auto ch : s)
{
cout << ch << " ";
}
}
实际上范围for的底层还是由迭代器实现的,只有先实现了string类的迭代器才能正常使用范围for,下面会介绍如何实现string的迭代器。
at
at和[]功能类似,都是借助下标来访问string对象的内容,不同的是他们处理错误的方式不同,[]处理越界的方式是断言报错,at采用的方式是抛异常
void test_string5()