标准模板库--STL

news/2024/7/3 18:25:20

这里写目录标题

  • STL初始
    • STL诞生
    • STL基本概念
    • STL六大组件
    • STL中的容器、算法、迭代器
    • 容器算法迭代器初识
      • vector存放内置数据类型
      • vector存放自定义数据类型
      • vector中嵌套vector
    • string容器
      • 构造函数
      • 赋值操作
      • 字符串拼接
      • 字符串查找与替换
      • 字符串比较
      • 单字符存取(读写)

STL初始

STL诞生

在这里插入图片描述

STL基本概念

在这里插入图片描述

STL六大组件

在这里插入图片描述

STL中的容器、算法、迭代器

在这里插入图片描述
在这里插入图片描述

容器算法迭代器初识

vector存放内置数据类型

在这里插入图片描述
vector是一个系统内置模板类 使用时要包含vector头文件
在这里插入图片描述
首先创建一个容器对象 并通过模板参数指定数据类型(当指定类型为int时 就可以认为是一个数组)

之后 调用该容器的成员函数 push_back(数据) 可以将数据以尾插法的形式插入容器中

但是想要访问容器中的元素 还需要一个迭代器 每个容器都有自己的迭代器(vector:: 就意为当前容器专属的迭代器),迭代器用来遍历容器中的元素
vector::iterator pBegin = v.begin();
迭代器数据类型 迭代器变量 容器成员函数-用来返回指向容器第一个元素的迭代器

vector::iterator pEnd = v.end();
迭代器数据类型 迭代器变量 容器成员函数-用来返回指向容器最后一个元素的下一位的迭代器
如下图:(可以将迭代器变量视为指针来使用)
在这里插入图片描述

接下来是遍历容器中的元素:
在这里插入图片描述
第一种类似于用两个指针来进行遍历 但是只递增一个指针
第二种方式 利用for循环 把创建迭代器与循环结合起来 简化代码
第三种方式 使用STL库里的算法 注意要包含头文件“algorithm”
for_each(首元素迭代器,尾元素后一个元素迭代器,每个元素要经历的函数的函数名(相当于一个函数体 每个元素当做参数))
例如:定义 void MyPrint(int val){
cout<<val<<endl;
}

那么for_each就是一个遍历输出

下面是for_each的源码
在这里插入图片描述

vector存放自定义数据类型

在这里插入图片描述
在这里插入图片描述
it是指向容器元素的指针 所以 *it就是模板参数列表中的参数 如下图 it是Person星 而星it就是Person
在这里插入图片描述
在这里插入图片描述
*it就是Person星 因为<>里面是Person星

vector中嵌套vector

在这里插入图片描述
在这里插入图片描述
对于循环遍历 外层循环每次都可以获取到一个大元素 该大元素就是vector类型的容器 所以*it也就是vector容器对象 依次指向前面插入的v1,v2,v3,v4。仍然是一个容器对象 并且可以调用其成员函数

所以也就有了内层循环中的变量 以及(*it).begin();

string容器

构造函数

在这里插入图片描述
string实际上是一个系统类 其有一个成员属性是char* 所以 string本质上仍然是char * string类中提供了许多成员函数 供我们使用
在这里插入图片描述
在这里插入图片描述

赋值操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
等号的赋值方法是比较常用的 可以直接字符常量赋值 或者一个字符串赋值给另一个字符串 或者一个字符 也可以赋值给字符串

字符串拼接

在这里插入图片描述
char* (“helloWorld”)或者string(s) 可以分别称为c形式 与 c++形式 在选择性字符拼接时 c形式只能选前几个 c++形式可以指定从哪个开始 数量几个

注意 函数返回值是引用类型 那么返回的是变量的别名 实际上就是变量 所以s1被拼接后 内容就保存到s1里面了 会跟随者下一次拼接 如下图
在这里插入图片描述

在这里插入图片描述

字符串查找与替换

在这里插入图片描述
里面要注意 替换可以以char* 或者string 可以分别称为c形式 与 c++形式

补充:正常类对象 即“不是常对象” 仍然可以调用成员函数里的常函数
在这里插入图片描述

在这里插入图片描述
在主串中查找子串 找到了返回子串第一个字符在主串中的位置下标 找不到返回-1

注意 rfind是从右开始查找子串 并返回第一个找到的下标 find是从左开始 返回第一个找到的下标
在这里插入图片描述
在这里插入图片描述

字符串比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单字符存取(读写)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
读:就是只能获取输出
写:就是可以修改


http://lihuaxi.xjx100.cn/news/1698427.html

相关文章

UOS系统无法开机问题解决

1、问题截图1 &#xff1a; 2、问题截图2 &#xff1a; 3、问题截图3&#xff1a; 解决方案&#xff1a; 修复磁盘无效&#xff0c;建议拷贝数据&#xff0c;还原系统 请先拷贝数据 进live模式在root a或root b 或系统盘找到Home文件夹里-找到用户名-里面就是用户的数据&am…

极米投影仪怎么样?轻薄投影极米Z7X值得选择吗?

对于当代快节奏的打工人而言&#xff0c;我们有时候很需要一些独特的方式来逃离日常生活的疲惫&#xff0c;拥有一个自己的空间&#xff0c;享受一个人的独处时光。要想享受居家独处好时光&#xff0c;当然少不了家居娱乐好伙伴极米Z7X。无论你是想要看一场科幻大片&#xff0c…

map和set底层实现【C++】

文章目录 map和set模板参数红黑树结点中的数据模板参数中的仿函数正向迭代器运算符重载--运算符重载 库里的写法setmapRBTree map和set模板参数 set是K模型的容器&#xff0c;而map是KV模型的容器 如何用一棵KV模型的红黑树同时实现map和set template<class K ,class V>…

FPGA片上RAM、片上ROM Nios 程序不起作用的解决方法

ctrl B 编译Nios工程 将 Nios software 的 meminit.qip onchip_rom.hex onchip_ram.hex meminit.spd 文件拷贝到FPGA目录下&#xff0c;再编译FPGA能起作用 Nios设置&#xff1a; reset 设置为 ROM 异常设置为 RAM 无优化

直接在网页上获取【微信公众号】用户的【openId】

一、公众号openId是什么&#xff1f; 公众号openId是用户在当前公众号下的唯一标识&#xff08;‘身份证’&#xff09;&#xff0c;就是说通过这个openId&#xff0c;就能区分在这个公众号下具体是哪个用户。 获取微信公众号用户的OpenId&#xff08;用户关注公众号后&#x…

基于JAVA+SpringBoot+UniApp+Vue的前后端分离的手机移动端图书借阅平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会信息化的快速…

Python调用包,及路径问题

我震惊了&#xff0c;搜了很多博客没有理解好的问题&#xff0c;GPT可以理解我的问题&#xff0c;并做出回答。也许这才是人工智能解决问题的意义&#xff0c;感谢GPT。 文章目录 问题1: 如何在自己的Python项目中调用自己写的文件问题2&#xff1a;如果执行调用的文件和被调用…

全志R128软件配置——RTOS 软件包配置

RTOS 软件包配置 本文将介绍 RTOS 软件包、地址&#xff0c;内核配置等。 Kconfig 简介 有过 linux 内核开发经验的人&#xff0c;对 menuconfig 不会陌生。对于各类内核&#xff0c;只要是支持 menuconfig 配置界面&#xff0c;都是使用 Kconfig。 换言之&#xff1a; me…