C++:STL的引入和string类

简介: 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;
}


相关文章
|
4天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
4天前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。
|
4天前
|
存储 设计模式 编译器
C++(十三) 类的扩展
本文详细介绍了C++中类的各种扩展特性,包括类成员存储、`sizeof`操作符的应用、类成员函数的存储方式及其背后的`this`指针机制。此外,还探讨了`const`修饰符在成员变量和函数中的作用,以及如何通过`static`关键字实现类中的资源共享。文章还介绍了单例模式的设计思路,并讨论了指向类成员(数据成员和函数成员)的指针的使用方法。最后,还讲解了指向静态成员的指针的相关概念和应用示例。通过这些内容,帮助读者更好地理解和掌握C++面向对象编程的核心概念和技术细节。
|
11天前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
10 1
|
11天前
|
存储 算法 编译器
[C++] STL简介
[C++] STL简介
9 1
|
4天前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
11天前
|
缓存 安全 Java
Java String类
Java String类
11 0
|
25天前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
28 0
|
25天前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
25天前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
下一篇
DDNS