STL视频_01
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
STL视频_01的更多相关文章
- STL视频_02
[01:05]主要讲一下几个要点: 1.模板.函数模板 类模板 以及它们的用法 2.容器.什么是容器 和 容器的分类,各种容器的数据结构 3.容器vector的具体用法,包括迭代器的具体用法 [01: ...
- STL视频_00
[05:40]比赛规则 - Part01[06:33]比赛规则 - Part02[07:28]比赛规则 - Part03[08:45]提出的问题 - 1和2[09:23]提出的问题 - 3和4 *** ...
- C语言 C++1X STL QT免费视频课程 QT5界面开发美化 式样表 QML
C/C++/QT界面开发界面美化视频课程系列 课程1 C语言 C++1X STL QT免费视频课程 QT5界面开发美化 式样表 QML 返回顶部 课程1 C语言 C++1X STL QT免费视 ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
- 我的STL学习之路
说起STL(标准模板库),相信了解C++的都不会陌生吧^_^.LZ是从大三开始学习C++(ps:不是科班出身),并慢慢接触使用STL的,在学校中使用STL比较多的情况是写数据结构代码,使用STL实现数 ...
- STL学习之路
本文面向的读者:学习过C++程序设计语言(也就是说学习过Template),但是还没有接触过STL的STL的初学者.这实际上是我学习STL的一篇笔记,老鸟就不用看了. 什么是泛型程序设计 我们可以简单 ...
- 侯捷STL学习(一)
开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...
- 软件开发:网站&视频&书籍推荐(不断更新)
利用书籍进行系统学习,凭借博客/新闻等资料开阔眼界,辅之以代码及项目实战,并勤加以总结,方可进步. 常用网站: Leetcode刷题:https://leetcode.com/ ,练习数据结构和算法必 ...
- 软件开发:网站&视频&书籍&文章推荐(不断更新)
利用书籍进行系统学习,凭借博客/新闻等资料开阔眼界,辅之以代码及项目实战,并勤加以总结,方可进步. 常用网站: 找英文电子书网站:gen.lib.rus.ec 和 www.jiumodiary.com ...
随机推荐
- DataTable数据导出到Excel,并发送到客户端进行下载
本代码实现思路是:页面显示和导出分开,导出的数据和用于页面显示的是同一查询数据方式,所以也是同样的数据,只是在导出数据时从数据库重新捞了一次数据.此导出数据方式会先将数据保存到Excel中,然后将创建 ...
- jQuery 文档操作方法(append)
这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 一.append() 方法 append() 方法在被选元素的结尾(仍然在内部)插入指定内容. 例子: <html& ...
- nginx1.4.7+uwsgi+django1.9.2项目部署,liunx系统为ubuntu14.0.4。
本文基于root用户下进行部署,django项目名称为BDFS 1. 安装依赖包,终端输入命令 1) 环境依赖包 apt-get update apt-get install pyt ...
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
Java 自带的加密类MessageDigest类(加密MD5和SHA) - X-rapido的专栏 - CSDN博客 https://blog.csdn.net/xiaokui_wingfly/ar ...
- Java基础 - 函数与方法
java 是一门面向对象编程,其它语言中的函数也就是java中的方法 方法的基本使用方法 package com.demo7; /* * 函数/方法 * * 定义格式: * 修饰符 返回值类型 方法名 ...
- Django视图views--白话聊Django系列
继续看上图,讲完控制器后,我们接下来看看视图部分 客户发来请求,首先经过控制器,然后到达视图,所以视图负责接收请求和作出响应,所以在视图里只需要关注两个:HttpRequest和HttpRespons ...
- RecyclerView添加分割线
mRecyclerView = findView(R.id.id_recyclerview); //设置布局管理器 mRecyclerView.setLayoutManager(layout); // ...
- 教你使用SQL数据库索引(1-15)
原文地址:http://www.sqlservercentral.com/stairway/72399/ 中文地址:https://www.cnblogs.com/tjy9999/category/4 ...
- Video标签的使用
现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.Chrome),支持H.264的(Safari.IE ...
- 谷歌机器学习速成课程---3降低损失 (Reducing Loss):梯度下降法
迭代方法图(图 1)包含一个标题为“计算参数更新”的华而不实的绿框.现在,我们将用更实质的方法代替这种华而不实的算法. 假设我们有时间和计算资源来计算 w1 的所有可能值的损失.对于我们一直在研究的回 ...