C++:STL的引入和string类

STL

STL是什么

什么是STL?STL是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

STL的六大组件

要学一个新知识,知道这个知识从大方向看有什么内容是必须的

六大组件主要如下所示

在这里插入图片描述
STL是C++的重要组成部分,如果把前面数据结构模拟实现的过程看成造轮子,那STL就是用前人创造好的轮子进行更高效率的工作
站在前人的肩膀上快速开发

那下面就开始学习string,学习新知识要有阅读文档的能力,有阅读文档的能力是必要的,本文及以后采用的是cplusplus的网站进行文本阅读和知识学习

string

在这里插入图片描述
上面是截取自该网站的内容信息,首先从中我们可以获取的信息有,string其实是typedef来的,是由basic_string来的,其次,标准string类通过类似于标准字节容器的接口提供了对此类对象的支持,但添加了专门设计用于操作单字节字符串的特性,前面也将到,string类是提供顺序字符的对象

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;
  4. 不能操作多字节或者变长字符的序列

那既然string是一个类,那么就必然有类内的成员函数:

string类内成员函数

string类对象中,成员函数相当多,这里先写一些比较常用的

首先是构造函数:

在这里插入图片描述
下面是对构造函数的用法:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    
    
	char arr[] = {
    
     "hello world" };
	string s1;   // 构造空的string对象
	string s2(arr); // 用cstring构造string类对象
	string s3(10, 'a'); // 构造包含10个a的string类对象
	string s4(s2);  // 拷贝构造
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
	cout << endl;
	return 0;
}

其次是赋值重载

这是C++98的标准
在这里插入图片描述

在C++98的基础上,C++11又做出了新的改变,增加了新的赋值方式,但整体上还是利用C++98较多一些

在这里插入图片描述

访问元素的方式

在这里插入图片描述
从这里可以看出,运算符重载功能的强大,极大的增加了代码的可读性,以下面的例子来看:

int main()
{
    
    
	string s1 = "hello world";
	for (int i = 0; i < s1.size(); i++)
	{
    
    
		cout << s1[i] << " ";
	}
	cout << endl;
}

这里表面上看是和C语言中对字符串的遍历一样,事实上并不一样,这里使用的是运算符重载,增加了代码的可读性

下面是和容量相关的操作:
在这里插入图片描述

增删查改:

在这里插入图片描述

string方便的地方也体现在增删查改上,上面的函数都可以实现对string内内容的增删查改

迭代器

迭代器是STL中的重要组成部分,在几乎所有容器中,迭代器的用法相似,这里对迭代器进行重点介绍,其他容器的用法和这里是大差不差的

在这里插入图片描述
首先要看到迭代器是什么?迭代器的作用是什么?

如果从功能来看,迭代器可以理解成指针,利用指针来对string类内存储的数据进行多项操作,迭代器的作用可以对string类内成员进行成员访问,从而进行读和写等其他操作均有

这里首先看begin和end

int main()
{
    
    
	string s1 = "hello world";
	string::iterator it = s1.begin();
	while (it != s1.end())
	{
    
    
		cout << *it << " ";
		it++;
	}
	cout << endl;
}

上面是迭代器的用法,再看C语言中我们想要访问一个字符串是如何遍历的?

int main()
{
    
    
	char s1[] = {
    
     "hello world" };
	char* ptr = s1;
	while (*ptr)
	{
    
    
		cout << *ptr << " ";
		ptr++;
	}
	cout << endl;
}

从中也可以看出实际上,迭代器从功能来讲就是指针

这里需要注意迭代器的定义是如何定义的

在这里插入图片描述

在这里插入图片描述

对于不同的迭代器,定义的时候定义方法是不一样的

下面来看rbegin和rend,和前面不同,里面多了一个r,这个r的意思,实际上就是reverse,意思是反转,因此rbegin的意思就是反转着去读取数据

int main()
{
    
    
	string s1 = "hello world";
	string::iterator it = s1.begin();
	string::reverse_iterator rit = s1.rbegin();
	while (rit != s1.rend())
	{
    
    
		cout << *rit << " ";
		rit++;
	}
	cout << endl;
	while (it != s1.end())
	{
    
    
		cout << *it << " ";
		it++;
	}
	cout << endl;
}

猜你喜欢

转载自blog.csdn.net/qq_73899585/article/details/132054226