泛型编程
泛型编程允许编写与类型无关的代码,从而实现代码的重用。模板是泛型编程的基础,通过编写模板函数或模板类来实现类型无关的逻辑。
功能:
const
、volatile
或者 __unaligned
属性。C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
容器(Containers): 容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms): 算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
迭代器(iterators): 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。
早期的计算机使用 真空管 来表示数据:通电表示1,断电表示0。这种方式形成了 二进制 系统,英文称为 binary。二进制与十进制的区别在于进位规则:十进制是逢十进一,而二进制是逢二进一。
在十进制中,数字 3456 的含义如下:
3456 = 3 × 10^3 + 4 × 10^2 + 5 × 10^1 + 6 × 10^0 |
makefile 是一种用于自动化编译和构建程序的脚本文件,特别是在Unix-like系统中。它定义了如何将源代码编译成可执行文件或其他目标文件。通过 make
工具读取 Makefile 中的规则,自动处理源文件的依赖关系和编译顺序,从而简化和自动化了构建过程。
在编译过程中,源文件(如 .c
文件)会被编译成中间目标文件(在Unix下是 .o
文件)。这个步骤称为编译。编译器检查语法和声明,生成目标文件。如果源文件包含函数或变量的声明而没有定义,编译器会发出警告,但仍会生成目标文件。
GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器。最初为GNU操作系统开发,现在已被多数类Unix系统(如Linux、BSD、MacOS X等)采用,甚至在Windows上也可以使用。
CopyIO分两阶段(一旦拿到数据后就变成了数据操作,不再是IO): |
这里先额外介绍一下C++类的存储方式,然后介绍虚函数。
C++程序的内存格局通常分为五个区:全局数据区(data area),代码区(code area)、栈区(stack area)、堆区(heap area)(即自由存储区),文字常量区。全局数据区存放全局变量和静态变量,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。;所有类成员函数和非成员函数代码存放在代码区;为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区;文字常量区存储常量字符串,程序结束后由系统释放,余下的空间都被称为堆区。类的存储方式如下图所示: