STL简介+浅浅了解string——“C++”

各位CSDN的uu们好呀,终于到小雅兰的STL的学习了,下面,让我们进入C++STL的世界吧!!!


1. 什么是STL

2. STL的版本

3. STL的六大组件

4. STL的重要性

5. 如何学习STL

6.STL的缺陷

7.为什么要学习string类

8.标准库中的string类


什么是STL

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。


STL的版本

  • 原始版本:Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本--所有STL实现版本的始祖。
  • P. J. 版本:由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低, 符号命名比较怪异。
  • RW版本:由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。
  • SGI版本:由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本。被GCC(Linux)采用,可移植性好, 可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码, 主要参考的就是这个版本。

STL的六大组件


STL的重要性

STL模板分为容器、迭代器、算法和函数对象四个部分。

容器是一种数据结构,它可以存储一组数据并提供对这些数据的访问方式。STL中提供了多种容器,包括序列容器(如vector、list、deque)、关联容器(如set、map)等等。每种容器都提供了不同的操作方法,可以满足不同的需求。

迭代器是一种抽象的概念,它提供了对容器中元素的遍历和访问方式。STL中提供了多种迭代器,包括随机访问迭代器、双向迭代器、前向迭代器等等。不同类型的迭代器支持不同的操作方式,可以在不同的场景下使用。

算法是STL中的重要部分,它提供了多种常见的算法实现,如排序、查找、遍历等。这些算法可以应用于不同类型的容器和迭代器上,使得程序开发变得更加简单和高效。

函数对象是一种可以被调用的对象,它可以像函数一样被调用。STL中提供了多种函数对象,包括算术运算、关系运算、逻辑运算等等。函数对象可以和STL中的算法一起使用,使得算法更加灵活和通用。

总的来说,STL模板提供了丰富的工具集合,可以帮助程序员更加高效地开发C++程序。使用STL模板可以避免一些繁琐的工作,如内存管理、数据结构实现等等,从而使程序员能够更加关注于问题的本质,提高代码的可读性和可维护性。

在笔试中

把二叉树打印成多行_牛客题霸_牛客网

重建二叉树_牛客题霸_牛客网

用两个栈实现队列_牛客题霸_牛客网

在面试中

在工作中

网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。 


如何学习STL

 简单总结一下:学习STL的三个境界:能用,明理,能扩展 !!!


STL的缺陷

  • STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出 来已经相隔了13年,STL才进一步更新。
  • STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
  • STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
  • STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

为什么学习string类?

C语言中的字符串

C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

两个面试题

把字符串转换成整数_牛客题霸_牛客网

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本 都使用string类,很少有人去使用C库中的字符串操作函数。


标准库中的string类

string类(了解)

string - C++ Reference

 

百度百科-验证

百度百科-验证

  • 字符串是表示字符序列的类
  • 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。
  • string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信 息,请参阅basic_string)。
  • string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
  • 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个 类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

总结:

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

在使用string类时,必须包含#include头文件以及using namespace std;


好啦,剩下的string的详细内容小雅兰下一篇博客再来介绍,敬请期待吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pinpoint监控tomcat应用,页面显示No data collected

pinpoint安装部署教程大家都可以搜到。这里就不说了。单说一下 页面没有数据的情况。 部署环境,pinpoint安装部署在A服务器上。现在是在C、D、E、F……linux机器上安装pinpoint-agnet 1. 将文件 pinpoint-agent-1.8.5.tar.gz 上传到 服务器C、D、E、F…… 2. 解压…

第十八章DOM操作控制

DOM操作分类: jQuery中的DOM操作 一。设置和获取样式值 1.追加样式 addClass:追加CSS效果 removeClass:去除CSS内容 2.切换样式 3.判断是否含有指定样式:判断的是布尔类型的值 二。内容操作: 1.HTML代码操作 2.TEXT代…

【算法与设计模式】

一、数据结构与算法 1、算法性能评估 时间复杂度、空间复杂度 2、数据结构 数组与列表 队列 堆栈 链表 二叉树 多叉树 递归算法 二、设计模式 1、单例 (1)GIL:线程互斥锁。保证同一时刻只有一个线程在进行。 (2&#xff09…

Git GUI、SSH协议和IDEA中的Git使用详解

目录 前言 一、Git GUI的使用 1. 什么是Git GUI 2. 常见的Git GUI工具 3.使用 4.使用Git GUI工具的优缺点 优点: 缺点: 二、SSH协议 1.什么是SSH协议 2.SSH的主要特点和作用 3.SSH密钥认证的原理和流程 4. SSH协议的使用 三、IEDA使用git …

js随机生成颜色

封装一个函数 返回一个随机颜色 不传参数或者传true返回十六进制, 传false返回rgb模式 script>function Random(n, m) {if (n > m) {let temp nn mm temp}return Math.floor(Math.random() * (m - n 1)) n}function getRandomColor(flag true) {if (fl…

Linux常用命令——bzip2recover命令

在线Linux命令查询工具 bzip2recover 恢复被破坏的.bz2压缩包中的文件 补充说明 bzip2recover命令可用于恢复被破坏的“.bz2”压缩包中的文件。 bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用b…

桌面图标设置-将“我的电脑”、“控制面板”添加到桌面

桌面图标设置 1、将“我的电脑”、“控制面板”添加到桌面 桌面鼠标右键-个性化-主题-桌面图标设置-勾选”计算机“、”回收站“、”控制面板“-应用-确定-桌面鼠标右键-排序-名称

数据结构 队列(C语言实现)

目录 1.队列的概念及结构2.队列的代码实现 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 1.队列的概念及结构 队列:只允许在…

力扣第516题 最长回文子序列 c++ 动态规划 附Java代码 注释版

题目 516. 最长回文子序列 中等 相关标签 字符串 动态规划 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。…

3DMAX如何渲染室内效果图?

这可能不是最好的教程,但对于3dmax初学者来说,它具有一定的学习价值和启示意义。 任何在建筑或室内设计领域工作并需要室内或外部空间“艺术家渲染”的人都会熟悉行业巨头Autodesk发布的3ds Max。 3ds Max是此类工作的默认标准,不是因为它在其他3D程序中无法完成,而是因为它…

电脑出现病毒提示解决办法

已检测:Trojan:Win32/WacatacA!ml 状态:已隔离 隔离的文件在不会损害设备的受限区域内。系统将自动删除它们 日期:2023/11/1013:21详细信息这个程序很危险,而且执行来自攻击者的命令 受影响的项目: driver: haStdnetfilter file: C:WINDOWSsystem32\drivers\haStdne…

Django(三、数据的增删改查、Django生命周期流程图)

文章目录 一、 基于ORM进行的CURDuser_list:作为主页使用路由文件urls.py配置如下:add.html:用于新增用户的数据页add页面视图函数如下:edit.html:修改数据的页面那么来总结一下上序所操作所用到的内容。 导入已存在的表其方式有两…

dbeaver连接别人的数据库没有表

1.概念 非缺省的数据库: 通常是指在一个数据库管理系统(DBMS)中,除了系统默认创建的数据库之外的其他用户创建或自定义的数据库。许多数据库系统在安装后会创建一个默认数据库,例如MySQL中的mysql数据库,…

Python---字典的增、删、改、查操作

字典的增操作 基本语法: 字典名称[key] value 注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。 案例:定义一个空字典,然后添加name、age以及address这样的3个key # 1、定义一个空字典 person {…

【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固

​ 摘要 在开发iOS应用时,保护应用程序的安全是非常重要的。本文将介绍一种使用ipaguard混淆加固的方法来保护iOS应用的安全。通过字符串混淆、类名和方法名混淆、程序结构混淆加密以及反调试、反注入等主动保护策略,可以有效地保护应用程序的安全性。 …

从0开始python学习-34.pytest常用插件

目录 1. pytest-html:生成HTML测试报告 2.pytest-xdist:并发执行用例 3. pytest-order:自定义用例的执行顺序 4. pytest-rerunfailures:用例失败时自动重试 5. pytest-result-log:用例执行结果记录到日志文件 1. pytest-html…

SpringBootWeb案例——Tlias智能学习辅助系统(3)——登录校验

前一节已经实现了部门管理、员工管理的基本功能。但并没有登录,就直接访问到了Tlias智能学习辅助系统的后台,这节来实现登录认证。 目录 登录功能登录校验(重点)会话技术会话跟踪方案一 Cookie(客户端会话跟踪技术)会话跟踪方案二…

数据结构----顺序栈的操作

1.顺序栈的存储结构 typedef int SElemType; typedef int Status; typedef struct{SElemType *top,*base;//定义栈顶和栈底指针int stacksize;//定义栈的容量 }SqStack; 2.初始化栈 Status InitStack(SqStack &S){//初始化一个空栈S.basenew SElemType[MAXSIZE];//为顺序…

环境变量小节

这是写的第二篇环境变量博客,写了一年多了,第一次出现把自己博客删了的情况,不知道为什么明明发表了,然后就把草稿箱和回收站的删了,结果晚上发现没发表,回收站删除是无法找回的,以后还是要慎重…

使用Python自动检测SSL证书是否过期

目录 一、概述 二、SSL证书过期检测原理 三、Python实现SSL证书过期检测 四、注意事项 总结 一、概述 随着互联网的普及和安全意识的提高,SSL证书的使用变得越来越重要。SSL证书可以提供加密通信,保护用户的数据安全,防止中间人攻击等。…