1.构造一个空的类的对象--空字符串
string + (对象名)
string s1;
2.常量字符串初始化
?
string + 对象名 (“初始化”)
string s2("hello csdn");
3.拷贝构造初始化?
string + 对象名 (已存在对象)
string +对象名 = 已存在对象?
string s3(s2);
string s4 = s3;
上述三个为最常用的初始化方式
4.指定长度初始化。
string + 对象名("初始化内容,初始化长度")
string s5("asdfghjkl", 4);
5.指定字符及其个数初始化
string + 对象名 (个数,字符)?
string s6(5,'c');
6.取已存在对象的子串初始化
string + 对象名(已存在对象,指定起始位置,指定长度)
string s7(s2,3,5);
?
1.[下标]遍历
void test3()
{
string s1("abcdefg");
//1.[下标]遍历
//这里用到了size()函数,返回的是字符串长度,不包含\0
cout << s1.size() << endl;
for (size_t i = 0;i < s1.size();i++)
{
//这里用[],本质上是函数重载: s1.operator[](i);
cout << s1[i] << " ";
}
cout << endl;
}
string类的对象是自定义类型,用[]时需要找到其运算符重载函数进行调用
2.迭代器正向遍历
void test4()
{
string s1("abcdefg");
//2.迭代器遍历--iterator属于string中的一个内置类型
//从第一个位置开始
string::iterator it = s1.begin();
//end()是结束位置的下一个位置
while (it!=s1.end())
{
cout << *it << " ";
it++;
}
cout << endl;
}
我们刚开始接触迭代器,可以先将他理解成为指针,begin()指向第一个字符,end()指向最后一个字符的下一个,一般指向'\0',接下来的过程按照指针方式操作即可。
?
3.迭代器反向遍历
void test7()
{
string s1("abcdefg");
//3.迭代器反向遍历--reverse_iterator
//从第一个位置开始
string::reverse_iterator rit = s1.rbegin();
//end()是结束位置的下一个位置
while (rit != s1.rend())
{
cout << *rit << " ";
rit++;
}
cout << endl;
}
与正向迭代器遍历方向相反,需要注意语法形式,reverse_iterator、rbegin、rend
虽然是反向遍历,但是仍然是++,不是--
?
4.范围for
void test5()
{
//3.范围for遍历
string s1("hello csdn");
for (auto e:s1)
{
cout << e << " ";
}
cout << endl;
}
创建一个变量e,根据 s1 用 auto 推出e的类型,遍历时,会自动++,直到遇到 '\0' 结束
范围for的实现中,实际上被替换为了迭代器
?