c++的STL+string

目录

STL

什么是STL?

 STL有哪些版本?

 string

string的使用:

 string st1

 st2 += "北山口镇"​编辑

 string st3 = "巩义市"

string st4(10, '*')

cout << st1 << endl

string st6(st2);    string st7 = st2;

string st7("hello world", 5);

​编辑

string st8(st7, 2, 3);

实现数组元素的逆置:


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版权协议,转载请附上原文出处链接和本声明。