黑马程序员-C++进阶STL

缘起

  • 之前吧,虽然看了和买了一些CPP的书,可能学习方法不对,又或者自已能力真的有限,各种知识点没有串起来,总是在面试时突击一下,2019年开始all in到CPP项目上后呢,有发心要把知识串起来
  • 立足于现有电脑里的视频资料,忽然看到之前下载的“黑马程序员”系列,听C++基础(OO)部分时,感觉自已学的都串起来,于是坚持听完。差不多听了80%的时候,32W,自已2T的硬盘毫无征兆的挂了(外接的3.5读盘器也不行)。
  • 33W(0812-0818)计划开始看“C++进阶STL”,并复习之前的OO内容的,怕东西丢失了,自已学完一部分知识后写份学习笔记吧。
  • 下载的内容day05(不确定全不全,感觉不全)

    • day01:函数模板,类模板的语法
    • day02:MyArray的实现、类型转换、异常(比OO里面讲得详细一些)
    • day03:输入输出流、STL基础、string和vector
    • day04:deque、list
    • day05:multimap、函数对象、算法

内容

day01

  • 01-02,07:函数模板

    • 自动类型推导,显式指定类型MySwap<int>(a,b)
    • 重载时相同匹配,优先普通函数;指定函数模版的语法MySwap<>(a,b)
    • 07写的例子,char和int排序 不要忘记template
  • 03-04:CPP编译过程

    • -ESc参数,分别对应的4个过程,例: g++ index.s -o index
  • 05:模板函数实现原理剖析

    • 两次编译过程
    • 一次是函数模板的语法检查;一次根据具体的调用,再编译生成相应的模板函数
    • -S 生成 index.s文件,看汇编格式
  • 06,08:类模板,以及派生类

    • 类模板必须显式指定类型 Person<int>
  • 09:普通类的.h和.cpp分离编写
  • 10:类模板类内实现
  • 12:类模板类外实现_模板类中使用友元(2个)

    • 模板类中不要滥用友元
    • 12(2)我听了也有点蒙,我是g++编译器,没成功
  • 13-14: 类模板h和cpp分离编写

    • 模板机制和C++编译机制相关

      • 模块的2次编译,C++的独立编译,导致#include.h会报错,要#include.cpp或.hpp才行。
  • 15:类模板碰到static成员

    • static属于具体类的,而不是类模版的。

day02

  • 02-03:MyArray的实现

    • 冷不丁的还提了一下C++11的右值引用
    • 自已要思考并纸上实现一下,看看知识的差距在哪。
  • 04-06:类型转换

    • 用得比较多也就是static_cast<>()了,用于内置数据类型,具有继承关系的指针或引用【不管是父类到子类,还是子类到父类】
    • dynamic_cast<>()只能由子类型转成基类型,因为类型检查,子类占的空间多,基类相对少一些。

day03

day04

day05

  • 02、03、06 map相关

    • 基本类型的map操作学到了,4种插入方法

      • myMap.insert(pair<int,int>(10,10))
      • myMap.insert(make_pair(20,20));
      • myMap.insert(map<int,int>::value_type(30,30));
      • myMap[40]=40; 不存在key,会创建pair,存在则更新;访问不存在的key,也会插入到map中,并给个默认值,所以这种有副作用。
    • 自定义类型的map,我例子没运行成功,知识上只是有大概了解吧

收获&感想

履历

20190817

  • day01的整理,day02(2-6),day05(2、3、6)整理。因为0917看到代码中要用到map()操作,顺便看了一下
  • 用时1h的样子吧,就当是复习学过的内容了。

收获

  • 搜的时候,也看到了自已学习day01、day02的一些笔记(都不够系统),站在自已来自,那些当时要笔记的部分东西,已经内化到我的知识体系了(比如4种类型转换,函数模板,类模板语法【模板但我没找到项目中应用的地方】)
  • 也看到了一些书上没有提及到的坑,比如:

    • 分离写法中#include<hpp>的写法;
    • 在类模板中使用friend关键字;
    • 同样的修改,g++不认识,而vs认识。老师用vs讲的,我写例子用的是codeblock,clion都是基于g++
  • 纠正了自已觉得STL是用库的想法,之前的学习方法都是对着书本运行一下代码,但项目中真正解决问题时,比如用map在怎么去写好,还是要搜索引擎,多用,横向的多关联思考,纵向的往里面思考才行。

感想

  • 是不是视频不太全啊,毕竟是网盘上下载的,day05的课程,前2.5天都在讲的是C++OO里的高级一点的知识,后面2.5讲的是用法(虽然还没有听),模板的语法讲得也浅了些,模板特化都没有讲。

相关推荐