《C++快速入门》学习笔记
进度:P49完结
1、 每个变量都有一个存储类,默认的存储类是auto
2、 自动变量存储在栈里,并有着最小的作用域,当程序执行到语句块或函数末尾的右花括号时,它们将被栈回收
3、 static与auto不同,存储在静态存储区,在程序的生命周期内将一直存在。一个static变量可以有external或internal链接
4、 extern关键字在有多个翻译单元时非常重要,用来把另一个翻译单元里某个变量声明为本翻译单元里的一个同名全局变量。注意,编译器不会为extern变量分配内存,因为在其他地方已经为它分配过
5、 register要求编译器把一个变量存储在CPU的寄存器里,但有着与自动变量相同的作用域,它的存储速度最快,但有些编译器不允许使用这类变量
1、 分为外链接(external)、内链接(internal)和无链接(none)
2、 外链接的意思是每个翻译单元都可以访问它(前提是知道它的存在),普通函数、变量、模板、命名空间都有外链接。例如在不同翻译单元当中用同一个变量,可以用extern来告诉编译器已经声明过了
3、 内连接的意思是在某个翻译单元里定义的东西只能在翻译单元里使用,在任何函数以外定义的静态变量都有内链接。例如在不同翻译单元当中用static关键字声明了两个同类型同名的变量不会冲突。
4、 在函数里定义的变量只存在于函数的内部,没有任何链接(none)
1、 template,也可以用template,尖括号里的class T是用来告诉编译器,字母T将在接下来的函数里代表一种不确定的数据类型
2、 使用时,swap(T& i1,T& i2)调用时,可以用swap(i1,i2)来明确告诉编译器使用哪一种类型
3、 不要把函数模板拆分成原型和实现两个部分,如果编译器看不到模板的完整代码就无法正确地生成代码
4、 如果某个函数对所有数据类型都进行同样的处理,就应该把它编写为一个模板;如果某个函数对不同的数据类型进行不同的处理,就应该对它进行重载
1、 类模板类似函数模板,注意在写作用域的时候用尖括号写明T占位符
2、 C++没有限制只能使用一个类型占位符,如果类模板需要一种以上的类型,根据具体情况多写几个占位符就行,例如template,在实例化时只需要这么做:MyClassmyClass;就可以
*用类模板来写一个栈
1、 栈是一种数据存储机制,只提供两个函数:一个用来把数据压入栈的顶部,另一个用来从栈取出顶部元素(先进后出)
1、 引入内联函数的目的是为了解决程序中函数调用的效率问题
2、 从源码层看,它有函数的结构,但在编译后不具备函数的性质,类似宏替换,使用函数体替换调用处的函数名
3、 一般用inline修饰,但是否能形成内联函数,需要看编译器对该函数定义的具体处理
4、 在创建类模板时,避免类声明和类定义相分离的一个好办法是使用内联方法,在类里,它是指在声明该方法的同时还对它进行定义(就是直接把定义写在类里)
向量std::vectorvectorName;其实本质上是使用了模板书写的数据结构
1、 迭代器是个所谓的智能指针,具有遍历复杂数据结构的能力
2、 标准库种的每一种容器都支持迭代器,通过迭代器就能方便地在程序当中改用另一种容器,事实上每种容器都将其迭代器以嵌套的方式定义于内部
3、 迭代器提供的是一种相同的接口
4、 由::符号即可看出,下面声明的iter是在vector容器里面的iterator类型,是用来遍历的指针变量
可以用algorithm里面的sort函数对上例进行排序输出
写在后面:
1、非常感谢小甲鱼这个系列的视频,听着觉得挺浅显易懂的,比起上学期高程一开头就告诉我写栈的那一回,我这一次真的听懂了,所以为什么上个学期模板模板一头雾水,迭代器迭代器一头雾水我也不是很明白(?)
2、现在想想,当时天天高程课ptsd觉得自己缺个脑子可能是真的不太有脑子(不太聪明的样子= =、)
3、感谢一下假期一直在pyq更新数学的某位朋友(虽然我本人日常被里面的数学题吓到打开推送-关闭推送)。这真的是一个有意思的促进学习的办法,我没想到更新推送可以让我完整学完这个网课还不睡着(?)
4、还有就是没想到其实真的有人认真看我没头没尾的笔记推送,没本事做教程,也没本事做面向零基础朋友的科普,就单纯是为了防止看网课睡着做的摘录——这还是我从我文科朋友那边学来的(?)
5、甚至有朋友点名说“咸哥你更新快一点,我每天都看呢,你啥时候能不能跟新一下那个python的balabala,还有那个什么balabala”
6、虽然上面的朋友玩笑开得过于离谱,离谱到我都不知道人说的那些是啥,但是,咕咕咕咕,下次一定!
7、那么后面也许会努力多写一点数据结构和算法那个方向的东西 吧(如果我真的能搞定咕咕了很久的JavaScript的话)
8、所以到底怎么才可以做到跑步学习两不误啊啊啊!!为什么会有跑得慢学得也差的人存在啊啊啊!
9、对了,今天发现好多问题——比如用extern来解决链接当中产生的问题——都在上一个项目当中解决了,只是我自己不知道那些bug具体是叫什么了。虽然当时debug的时候真的啥都看不懂,恶心到看到那个就恶心,但是吧,呜呜呜孩子吃的苦和出过的bug都是真实存在的。
10、好了,下个专题的推送见朋友们
IT双侠的咕咕咕日常
内容/排版:咸哥
特别鸣谢:小甲鱼