STL视频_01

2023-05-16

ZC:这里视频里面有一个调试小技巧,VS08/VS2010开始,控制台程序会自动退出(不像VC6),那么可以在 函数退出的最后一句语句上设置断点,然后查看控制台打印出来的信息。
ZC:这一讲,给我的感觉是,用string的好处就是 字符串操作时 索引越界的事情可以不用考虑了(如 复制/删除 等操作)

 

【01:05】这一讲,主要讲解如下要点:
一、什么事STL,使用STL的好处;
二、STL的string类型的使用方法。

【01:25】STL的简介
标准模板库
【01:45】STL的代码,广义上来讲,分为3类:容器、迭代器、算法。容器 和 算法 可以通过 迭代器 进行无缝的连接。
【02:02】string 和 wstring 也是STL的一部分

【02:28】STL的组成和内部关系
【03:05】STL的好处
【03:12】概括的说一下,什么叫容器
【04:35】STL的一个重要特点
数据结构(容器)和算法的分离 ==> 重用率很高。我这个排序算法,既可以用于 list容器 也可以用于其他的容器。
【05:55】比如 STL里面有一个 sort(...)排序函数,我们可以用来操作vector、list这样的容器
【06:15】STL具有高度的可重用性、高性能、跨平台 的优点

【06:27】使用STL的好处
01_02_使用STL的好处.jpg
(1)、【06:28】高可重用性
(2)、【07:50】高性能
01_03_使用STL的好处.jpg
(3)、【08:24】高移植性
(4)、【08:52】跨平台

【09:20】STL的其他好处:程序员不用思考STL的实现过程,只要能够熟练的掌握STL就可以了。可以将精力放在业务逻辑上。


【10:40】string
string是什么、string和char*的比较、如何调用STL的string,往后会讲到 string的构造函数、如何取字符(串)、如何取得 const char *(里面的操作)、如何拷贝char*指向的空间。
我们会讲到string 怎么取它的长度,如何知道这个string里面包含了多少个字符,string如何赋值,string两个字符串如何连接、如何比较、如何取string串里面的子串,如何查找、如何插入、如何删除、如何替换,和wstring的区别,string 和 wstring 的转换,string编码的统一化。

【12:11】string是什么
01_04_string是什么.jpg
【12:30】string 和 char* 的区别:
首先,string 是一个类,char* 是一个指向字符(ZC:串?)的指针,string封装了 char* ,管理字符串,是一个 char*类型的容器。
【12:45】string不用考虑内存释放和越界的问题。string管理了char*所分配的内存,每一次string的复制、取值 都是由string类来负责维护的,不用担心 复制越界 和 取值越界 这样的问题。
【13:05】string支持运算。比如 两个字符串连接。
【13:22】string还提供了一系列的字符串操作函数。如 查找、拷贝、删除、替换、插入 等等。
【13:31】我们如何使用string。使用它之前,首先要在我们的代码的文件里面(头文件里面/cpp文件里面),先要写一行代码:

#include <string>
using namespace std;

这样写的好处:防止我们的这个string 跟 程序其它部分定义的string 重名,(当然我们最好注意 不要重名)。
【14:15】“using namespace std;”是STL相对标准的一种写法,它目的是为了定义一个命名空间。


【14:28】string的构造函数
01_05_string的构造函数.jpg
【14:32】构造函数 一般有 默认构造函数、拷贝构造函数、带参数的构造函数。

【17:22】取string(字符串)中的某一个字符
两种:[?] 和 at(?)
【18:43】01_06_string的取字符操作.jpg
【19:25】[?] 和 at(?) 的唯一区别:这两个方法对越界的处理是不一样的
【19:45】例如,我们取第50个字符(这里没有50个字符):【20:03】用“[?]”来取,程序就会读地址错,就会越界。STL对 [?] 是没有做越界判断的,∴它直接会导致程序的crash。【20:20】对“at(?)”来说,它是不会产生crash问题的,它会抛出一个异常,超出范围的异常(out_of_range),该异常能够被“try{}catch(...){}”捕获到,这个时候 catch(???)里面就可以写上特定的 错误捕获的类型。

【21:32】我们看到取字符

const char &operator[](int n) const;
const char &at(int n) const;
char &operator[](int n);
char &at(int n);

上面“const char &”和 直接“char &” 有何区别?
【21:40】当我们要获取某一个 字符 的时候,实际上调用的是 返回"const char &" 的对应的两个函数。
【21:55】如果我们想要修改 某一个位置上的字符的值的话,ZC:调用的就是 返回"char &" 的对应的两个函数。【22:30】【22:35】为什么不是const?∵说明里面的值可以被修改。


【22:50】string如何取得 "const char*" 里面的操作。
意思是说:我们有时候想要把我们的string里面的内容打印出来,打印到屏幕上去。
【23:22】一般都是采用“cout << ?? <<endl;”,但是它不接受string,接受char*。
【24:00】string::c_str() 返回“const char*”


【25:15】如何把string 字符串里面的内容拷贝到 char*所指向的内存空间去
【25:32】把string拷贝到char*指向的内存空间的操作
01_07_把string拷贝到pchar指向的内存空间的操作.jpg
int copy(char *s, int n, int pos=0) const;
ZC: 注意参数 个数 在前,起始位置 在后
ZC: 注意是 string::copy(...),不要和 Delphi里面的copy函数搞一起搞混了...

【29:30】如何取得字符串的长度,如何判断字符串是否为空
当然,字符串长度==0,肯定是为空。字符串长度==0,可能有时候还不是很方便,用 bool string::empty() const;
【29:50】01_08_string的长度.jpg

【30:13】01_09_string的赋值.jpg
【30:28】1、=:const string& ==> string&
【31:23】2、string &string::assign(const char *s); // s的 所有字符
【31:31】3、string &string::assign(const char *s, int n); // s的 前n个字符

【31:52】01_10_string的赋值.jpg
【31:55】4、string &string::assign(const string &s); // 类似于 operator=
【32:08】5、string &string::assign(int n, char c); // 类似于构造函数里面的相应函数。n个相同的字符c ==> string&
【32:30】6、string &string::assign(const string &s, int start, int n);


【32:36】字符换的连接
【34:28】01_11_string的连接.jpg
【33:01】1、+=
【33:19】之前准备的例子
(1)、+= const string &
(2)、+= const char *
【35:15】2、string::append(...)
(1)、const char *
(2)、const char *, int n
【37:03】01_12_string的连接.jpg
(3)、const string & // 同 +=
(4)、const string &s, int pos, int n
(5)、int n, char c


【40:30】string 字符串的比较
01_13_string的比较.jpg

int string::compare(const string &s) const;
int string::compare(const char *s) const;
大于 --> 返回 1
小于 --> 返回 -1
等于 --> 返回 0
ASCII 码表 字典顺序,排越前越小

【41:49】比较 的例子
【42:31】字符是一个一个来比较的,一旦得出胜负,比较久结束了,直接返回值了


【44:02】如何取得string的子字符串
【44:15】01_14_string的子串.jpg
string string::substr(int pos=0, int n=npos) const; // 返回由pos开始的n个字符组成的子字符串
ZC:后面一个参数的默认值含义,应该是从pos往后的所有字符吧?测试下来,确实是这样。


【15:20】string的查找
【45:56】有两个方向的查找
【46:30】例如 找文件扩展名,从后往前比较好 ==> string::rfind(...)
【46:55】01_15_string的查找.jpg
【47:18】string的查找 例子
(1)、找字符
(2)、找 const char* 字符串
【49:05】ZC: 这里的例子,我和视频作者都觉得应该返回的是3(待查找字符串的开始位置),但是返回的却是5(待查找字符串的结束位置)
【50:18】ZC: 找到原因了,确实应该是3,居然是 ∵字符串用单引号括起来,但是居然能编译的过去...测试了一下,真编译的过去,Why?
(3)、找 const string& 字符串
(4)、string::find(...) 找不到,则返回 -1

【51:45】反向访问(01_16_string的查找(反向).jpg)
ZC: 测试一下,看看第二个参数的含义(是正着数的索引 还是倒着数的索引?), 返回值的含义(是正着数的索引 还是倒着数的索引?)


【52:50】string的插入
【53:33】string::insert(...)
【54:25】01_17_string的插入.jpg

【55:02】字符串的删除
string::erase(开始删除的字符的索引, 删除多少个字符)
删除 在我们其他容器里面都是采用 erase(...),比如 vector里面删除一个节点、map里面删除什么
【55:50】删除的例子


【56:29】string的替换
string::replace(...)
【57:05】有两个操作:
(1)、先把 索引值 和 个数 确定的字符(串) 删掉
(2)、然后再插入新字符(串)
【57:23】例子
【58:15】第一个replace() 和 第二个replace() 它们的功能是一样的,【58:22】第三个(还有一种),就是交换
【58:33】交换 的例子 --> string::swap(...)

 

【59:50】string 和 wstring 的区别

【01:00:30】string 和 wstring 的转换
01_18_string与wstring的转换.jpg
(1)、Windows API
(2)、ATL ==> COM ==> 这个也只能用于 Win平台...
【01:01:01】ZC:T2W、W2T 这两个PPT里面没有,是视频作者口头讲的
【01:01:08】01_19_string与wstring的转换.jpg
(3)、跨平台 CRT库 mbstowcs() / wcstombs(),需要设定locale
ZC: "设定locale"什么意思?是指需要“#include <locale.h>”吗?貌似还有 setlocale()等的函数需要调用。
【01:01:43】01_20_string与wstring的转换.jpg
【01:02:01】01_21_string与wstring的转换.jpg


【01:02:45】使用 string/wstring 的同一方案
【01:02:55】01_22_编码统一化,编写单一源代码.jpg


【01:03:30】本讲讲了如下要点:
【01:03:32】1、什么是 STL,STL的好处,广义上分为三类 ....
ZC:看 PPT 吧...

 

 

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

///

 

 

C

 

转载于:https://www.cnblogs.com/CodeSkill/p/5163697.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL视频_01 的相关文章

随机推荐

  • C语言中字符串结束符'\0'

    本质 39 0 39 就是8位的00000000 xff0c 因为字符类型中并没有对应的这个字符 xff0c 所以这么写 39 0 39 就是 字符串结束标志 39 0 39 是转义字符 xff0c 意思是告诉编译器 xff0c 这不是字符
  • SLAM中双目三角化

    双目三角化 形式1 xff1a 在等式左边同时乘 x 1 x 1 x 1 和
  • 用手机对电脑进行远程关机

    PS 本人一月份写的文章 xff0c 贴在这里 昨天真是奔波的一天 xff0c 中午烤肉逛街下午寿司看电影 xff08 陪老婆 xff09 今天中午又是麻辣诱惑 额 xff0c 不争气的肠胃果然导致我拉肚子了 不过 xff0c 话说昨天下午
  • 程序员到底是一个什么职业?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 程序员首先是雇员 然后是工程师 xff1b 比起创造力 xff0c 工程能力对这个职位更为重要 为什么有人在技术造神 大家应该已经感受到 xff0c 技术圈这两年已经和娱乐
  • android 清理内存杀死service,关于Service常驻内存不被清理的解决方法.

    众所周知 Service是跑后台的 但是有些Rom厂商把一键清理做的真是太好用了 以至于一键清理变成了一种习惯 Service已经变的不再是Service了 那为什么像诸如360 微信 QQ 却可以傍山傍水 哦 用错词了 大家懂的 言归正传
  • 自主做一个类似于微博的项目(计划篇)

    项目名称 xff1a archou微博 项目架构 xff1a B S架构 项目开发语言 xff1a java jquery html hql 开发框架 xff1a spring mvc hibernate 开发平台 xff1a window
  • [工作记录] 点云线特征提取

    概述 目前的点云线特征提取方法可以分为 xff1a 1 基于面片patch的线特征提取 xff0c 主要可以提取交线 xff0c 边缘线 这类方法首先都是要提取面 xff0c 然后对每个面对象提取 又可以分为 xff1a 基于图像的提取 x
  • Javascript闭包:从理论到实现,[[Scopes]]的每一根毛都看得清清楚楚

    昨天我写到 所有Javascript函数都是闭包 xff0c 有些同学表示还是接受不能 我好好的一个函数 xff0c 怎么就成闭包了 xff1f 那么 xff0c 让我们来探究一下 xff0c Chrome xff08 V8 xff09 到
  • mysql5.7安装审计插件libaudit_plugin.so

    1 下载插件 https bintray com mcafee mysql audit plugin release 1 1 7 805 files 2 解压插件复制到mysql lib库插件目录下 xff1a unzip audit pl
  • 通过jdbc连接hive报java.sql.SQLException: Method not supported问题

    今天尝试通过jdbc连接hive xff0c JDBC直接连接是正常成功的 xff0c 实例 xff1a import java sql Connection import java sql DriverManager import jav
  • DHCP介绍及H3C配置DHCP

    1 DHCP引入 1 简介 DHCP xff08 动态主机设置协议 xff09 是一个局域网的网络协议 xff0c 使用UDP协议工作 xff0c 主要作用是集中的管理 分配IP地址 xff0c 使网络环境中的主机动态的获得IP地址 Gat
  • centos7-内核版本降级

    环境介绍 线上环境运行centos 内核版本规定为 xff1a CentOS Linux release 7 3 1611 Core 查看内核版本参考命令 xff1a root 64 localhost cat etc redhat rel
  • SLAM中多目三角化

    多目三角化 1 闭式求解1 1 DLT 最小二乘方法求解1 2 最小化3D距离 2 构建优化方法求解3 构建高斯深度滤波器 LSD SLAM4 构建Beta分布滤波器 SVO5 EKF SLAM参考资料 在能实现双目计算特征点的深度基础上
  • 微软操作系统 Windows Server 2012 R2 官方原版镜像

    微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司 xff08 Microsoft xff09 设计开发的新一代的服务器专属操作系统 xff0c 其核心版本号
  • 最近很忙,也很累,忙里偷闲,尝试了下apache solr的安装

    最近很忙 xff0c 也很累 xff0c 忙里偷闲 xff0c 尝试了下apache solr的安装 第一次接触java的 xff0c 就和初次安装NET一样 部署开发环境折腾来折腾去 几经波折总算成功了 分享下个人安装的过程 xff1a
  • "类工厂模式"改写SqlHelper

    看到标题您一定很疑惑 xff0c 23种经典设计模式什么时候多了一个 34 类工厂模式 34 稍等 xff0c 请听我慢慢道来 实践是检验真理的唯一途径 最近用了 34 类工厂模式 34 改写了我公司的SqlHelper类 xff0c 改写
  • C++中基于Crt的内存泄漏检测

    尽管这个概念已经让人说滥了 xff0c 还是想简单记录一下 xff0c 以备以后查询 ifdef DEBUG define DEBUG CLIENTBLOCK new CLIENT BLOCK FILE LINE else define D
  • revit卸载/完美解决安装失败/如何彻底卸载清除干净revit各种残留注册表和文件的方法...

    在卸载revit重装revit时发现安装失败 xff0c 提示是已安装revit或安装失败 这是因为上一次卸载revit没有清理干净 xff0c 系统会误认为已经安装revit了 有的同学是新装的系统也会出现revit安装失败的情况 xff
  • 内核必须懂(三): 重编Ubuntu18.04LTS内核4.15.0

    目录 前言编译前准备编译安装重启之后最后 前言 之前在写系统调用的时候也说过 但是当时理解有限 写的不好 这次再重新编译内核 分享经验 编译前准备 首先补包 sudo apt get install build essential kern
  • STL视频_01

    ZC xff1a 这里视频里面有一个调试小技巧 xff0c VS08 VS2010开始 xff0c 控制台程序会自动退出 xff08 不像VC6 xff09 xff0c 那么可以在 函数退出的最后一句语句上设置断点 xff0c 然后查看控制