• 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

  • 相关阅读:
    遮罩层可滚动
    toggle函数
    48.判断文本中回车的数量
    47.输出26个字母
    46.@弹出点击次数
    44.@鼠标点击页面中的任意标签,alert该标签的名称
    43.对象深度克隆
    UIscrollView 多图滑动 frame与bounds的区别比较
    累却真心充实 杂感
    delegate
  • 原文地址:https://www.cnblogs.com/CodeSkill/p/5163697.html
Copyright © 2020-2023  润新知