列表(list) 💻示例代码💻cout <<"初始化list为:";cout <<"Reverse后的list为:";return 0;初始化list为:1 2 0 3 4 5Reverse后的list为:5 4 3 0 2 1⑧ assign()——将值赋给容器assign()方法用于将链表中的元素替换为新的元素序列。它可以接受不同形式的参数,提供了两种重载形式。第一种形式接受迭代器范围作为参数,用于将另一个容器或数组中的元素复制到链表中。它会将链表清空,并将指定范围内的元素复制到链表中。
预处理、编译、汇编和链接 把一些#define的宏定义完成文本替换,然后将#include的文件里的内容复制到.cpp文件里,如果.h文件里还有.h文件,就递归展开。在预处理这一步,代码注释直接被忽略。过程将上一步的汇编代码(main.s)转换成机器码(machine code),这一步产生的文件叫做目标文件(main.o),是二进制格式。只是把我们写的代码转为汇编代码,它的工作是检查词法和语法规则,所以,如果程序没有词法或则语法错误,那么不管逻辑是怎样错误的,都不会报错。每个步骤都会生成对应的文件。才能变成可执行文件。
C++虚函数(详解) 在基类中使用virtual关键字修饰的成员函数称为虚函数。虚函数是 C++ 中实现多态性的重要机制,它允许在派生类中重写基类中的函数。虚函数的核心特性在于,它使得通过基类指针或引用调用函数时,可以根据实际对象的类型选择相应的函数实现。
#include <typeinfo> 头文件的作用是支持在 C++ 中使用运行时类型信息。它通过typeid操作符和type_info类提供了对象类型的识别、比较和相关信息获取功能,尤其在处理多态和动态类型时非常有用。
C++extern关键字(详解) extern "C"是在 C++ 中与 C 语言代码进行链接时的关键工具,它确保函数的名称不会被 C++ 编译器进行修改,保证了 C 和 C++ 代码之间的兼容性。通常在需要混合 C 和 C++ 代码的场景中使用,特别是调用 C 标准库或其他用 C 编写的库时。
C++模板(详解) C++ 模板是一个强大的编程工具,它允许我们编写通用的代码,适用于多种数据类型,从而提高代码的复用性和灵活性。模板包括函数模板和类模板,能够根据不同的类型进行实例化,编译时自动生成相应的代码。模板不仅提高了编程效率,还提供了更好的类型安全性。
代码解释(10.20) 保留了默认构造函数(但受保护,外部无法直接调用),允许类内部的控制方式来创建实例。:删除了拷贝构造函数,防止通过拷贝创建新实例。:删除了拷贝赋值运算符,防止通过赋值来复制对象。这三部分共同作用,确保Singleton类的实例是唯一的,符合单例模式的设计要求。
template <typename T>详解 提高代码的通用性和可复用性:模板使得函数和类可以接受不同类型作为参数,避免了大量的代码重复。编译期类型检查:模板代码在编译时实例化为具体的类型,确保类型安全性。简化代码维护:通过减少代码重复,维护工作只需集中在模板定义处。在泛型编程中,是一种强大的工具,它使代码更灵活、更具扩展性。
override override用于确保虚函数的正确重写,避免签名不匹配问题。它能提高代码的可读性和可维护性,便于他人理解代码中的继承关系。下面通过一个具体的代码实例展示了override的使用,以及它在派生类中防止函数签名不匹配和提高代码可读性等方面的作用。
C++指针(超详解) 指针的定义使用符号,表示指针类型。你可以通过运算符获取变量的地址。int a = 10;//定义一个整型变量//定义一个整型指针,指向变量a的地址其中int*的作用是声明一个指向整型(int)的指针,p是指针变量,&是取地址符,所以,上述代码的意思是将整型变量a的地址用取出赋值给指针变量p。int a = 10;//打印p指向的地址空间return 0;指针数组:是一个数组,每个元素都是一个指针。示例中ptrArr是一个包含3个指针的数组。数组指针:是一个指针,它指向一个数组。示例中。
C++中const(最全详细说明和使用) C++ 中的const提供了一种强有力的机制来提高代码的安全性和可读性。它能有效防止程序中的意外修改,确保某些数据的不可变性。通过在适当的地方使用const,可以使代码更加健壮并减少错误的发生。
伪终端(pseudo-terminal)是什么? 伪终端在Linux/Unix系统中提供了一种灵活的机制,用于模拟终端设备,使用户、程序或远程连接工具可以通过虚拟终端与系统交互,特别是在远程会话和终端模拟器中非常重要。
c++ static(详解) 在中,关键字用于定义具有的变量或方法。它在不同上下文中有不同的含义,通常与变量的存储方式和作用域相关。的主要作用是控制变量或函数的可见性和生命周期。可以通过一个生活中的场景来形象化。
GDB调试 使用以下命令编译:注:当在 中直接使用时,会默认执行上一条命令下面是一个使用GDB进行调试的具体实例,包括代码编写、编译、启动GDB、设置断点、执行调试等。假设你有一个简单的C++程序 :1. 编译程序首先,使用 选项编译程序以包含调试信息:2. 启动GDB启动GDB并加载编译后的程序:3. 设置断点在 函数的入口处设置断点:在 函数的入口处设置断点:4. 运行程序运行程序并提供输入:程序会在 函数的入口处暂停。此时,GDB会显示程序的状态和当前
最小覆盖子串 给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。tts"BANC"最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。"a"整个字符串 s 是最小覆盖子串。""t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。
Makefile(超详细一文读懂) make: 默认会编译源文件,生成可执行文件app。make clean: 清理编译生成的对象文件和可执行文件。以下是一个简单的Makefile示例,适用于一个包含多个源文件的 C++ 项目。project/Makefile# CompilerCXX = g++%.o: %.cppclean:CXX = g++CXX = g++: 定义了编译器使用g++。: 设置编译选项:-Wall: 启用所有常见的编译警告,有助于发现潜在的错误。-std=c++17: 指定使用 C++17 标准。
(C/C++)静态库和动态库的制作 这意味着,静态库中的代码会被复制到每个使用它的程序中,因此静态库不需要在程序运行时被单独加载。制作静态库可以帮助你将常用的代码模块化、重用,简化开发过程。首先,创建几个C/C++源文件,它们将组成静态库。例如,创建两个c文件math_functions.c和string_functions.c,并为其编写相应的功能。接下来,使用ar(archive utility)工具将这些.o文件打包成一个静态库。静态库的扩展名通常是.a。要使用你创建的静态库,编译和链接你的测试程序时,必须指定库的路径和名称。
gcc 与 g++ 区别 gcc:C语言编译器,默认编译C代码,编译C++时需要手动链接C++库。g++:C++语言编译器,默认编译C++代码,自动链接C++标准库。如果你的项目主要是C++代码,通常使用g++更方便,而对于C语言代码,使用gcc是更合适的选择。