目录
string st6(st2); string st7 = st2;
STL
什么是STL?
答:
STL有哪些版本?
答:
string
如何进行理解:
template<class T>
class basic_string
{
private:
T* _str;
size_t _size;
size_t _capacity;
};
typedef basic_string<char> string;
string的本质就是这样,我们先通过模板写一个数组模板,然后该数组模板的char类型的实例化对应的就是string
string的使用:
#include<iostream>
#include<string>
using namespace std;
void test_test1()
{
string st1;
string s2("巩义市");
}
int main()
{
test_test1();
return 0;
}
要注意string也是属于std中的,所以需要我们使用using namespaced std来方便string的使用。
我们可以发现,string在库里是有默认的构造函数。
string st1
st2 += "北山口镇"
所以string是有+=的重载函数的
string st3 = "巩义市"
所以string的库中是有拷贝构造函数的
string st4(10, '*')
我们完成了把string中的前十个元素初始化为*
cout << st1 << endl
string同样也支持流插入。
string st6(st2);
string st7 = st2;
拷贝构造,我们看其是否是深拷贝。
首先,完成了拷贝。
并且完成了深拷贝。
string st7("hello world", 5);
表示用hello world的前元素对st7进行初始化。
string st8(st7, 2, 3);
表示用st7的第二个元素开始,往后的三个元素对st8进行初始化。
我们这里的第三个参数也可以不写:
不给的话,默认的参数是npos
npos的默认值也就是无符号整型的最大值,所以相当于我们把st7从第二个元素开始全部拷贝给st10,打印的结果如下:
假如我们想要把字符串的每一个元素都加1的话,我们该怎么处理?
答:我们可以使用for循环,
1:下标的形式
void test_test2()
{
string s1("1234");
for (size_t i = 0; i < s1.size(); ++i)
{
s1[i]++;
cout << s1[i] << endl;
}
}
int main()
{
test_test2();
return 0;
}
这个size()也是我们的string的成员函数,我们进行打印。
2:范围for的形式:
void test_test2()
{
string s1("1234");
for (autoch : s1)
{
ch--;
}
cout << s1 << endl;
}
int main()
{
test_test2();
return 0;
}
这种写法是不行的,因为范围for这里表示的是把s1的每个元素都赋给ch,但是我们让ch改变并不影响数组中的值,所以我们需要这样修改。
我们可以用引用来接收
这里的意思是把s1每个元素的引用都赋给ch,也就是说ch是s1的每个元素的别名,所以我们对ch的处理会使数组元素发生改变。
实现数组元素的逆置:
int main()
{
/*test_test2();*/
string s1("1234");
size_t begin = 0;
size_t end = s1.size() - 1;
while (begin < end)
{
swap(s1[begin], s1[end]);
begin++;
end--;
}
cout << s1 << endl;
return 0;
}
我们进行编译:
版权声明:本文为qq_66581313原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。