现代CMake基础
注释行注释1# 这是一个CMakeLists.txt文件 块注释12345#[[这是一个CMakeLists.txt文件这是一个CMakeLists.txt文件这是一个CMakeLists.txt文件]] 基础设置最低版本设置1cmake_minimum_required(VERSION 3.15) 说明: 指定 CMake 的最低版本要求 一般现代项目建议使用 3.15 或更高版本 若项目依赖较新的特性,可适当提高版本要求 定义工程名称12345project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] # 指定工程版本 [DESCRIPTION <project-description-string>] # 工程描述 [HOMEPAGE_URL <url-string>] # web主页地址 [LANGUAGES <language-name>...
Git的基础概念与命令
git基础概念git简介Git 是一个当代最先进、最主流的分布式版本控制系统,它用于追踪文件的变化历史,特别适用于程序员和团队协作开发的场景。 通过Git,我们可以记录文件的每一次修改,并能随时回溯到历史版本。这就像是我们给文件装上了一个“时间机器”,可以随时查看和恢复到过去的状态。并且,如果是多人同时编辑文件,Git 会帮你合并不同人的修改,避免覆盖和冲突。 因此,Git 就像是一个“超级版的文件管理器”,它不仅能帮你管理文件的历史版本,还能让你和团队成员高效地协作开发、解决冲突。 所以,对于程序员来说,Git是开发流程中不可或缺的一部分。只要你是一个程序员,或者你想要从事计算机行业,那么Git 都是你必须学会的基础技能。 git的基本概念仓库存储和管理文件的地方,里面保存另所有的文件、版本记录和历史信息 本地仓库:自己的极其或电脑上创建的仓库,存储着本地对项目的所有文件和修改历史,每当提交代码时,git会将文件保存在本地仓库中 远程仓库:存放在服务器上的仓库,通常用于团队合作中的代码共享和同步(如:github) 工作目录当前正在编辑的文件所在的地方,对文件进行的修改都发生在...
LLDB基础
LLDB 基础使用指南1. 准备工作:编译时添加调试信息要使用 LLDB 调试程序,必须在编译时生成调试符号。在 GCC 或 Clang 中,添加 -g 选项: 123g++ main.cc -g -o main# 或clang++ main.cc -g -o main 2. 启动 LLDB有两种方式启动调试: 直接加载程序: 1lldb main 先启动 lldb,再加载程序: 12lldb(lldb) file main 3. 程序执行控制 命令 缩写 说明 run r 启动程序,程序会在断点处暂停 next n 单步执行(不进入函数内部) step s 单步执行(进入函数内部) finish 执行完当前函数,返回到调用处 continue c 继续执行,直到下一个断点或程序结束 4. 查看和修改变量 命令 说明 print <变量名> 或 p <变量名> 打印变量的值 po <指针变量名> 打印 Objective-C / Swift 对象描述(也可用于 C++ 对象,若重载...
C++_特殊工具与技术
特殊工具与技术这部分内容的特点是: 不一定天天写 但体现 C++ 的底层能力和语言灵活性 很适合出概念题、判断题、细节题 复习策略: 先抓用途,再抓语法,再抓限制 控制内存分配C++ 中对象通常通过以下方式创建: 自动对象:定义在函数内部,离开作用域自动销毁 静态对象:程序开始时创建,程序结束时销毁 动态对象:通过 new 分配,通过 delete 释放 所谓“控制内存分配”,主要就是指: 自定义对象的分配和释放行为 new 和 delete 的基本过程12T *p = new T;delete p; new T 一般做两件事: 分配原始内存 调用构造函数构造对象 delete p 一般做两件事: 调用析构函数销毁对象 释放内存 为什么要控制内存分配某些场景下,我们希望: 提高效率 使用专用内存池 跟踪内存使用 限制对象只能在堆上/栈上创建 调试内存泄漏 于是可以通过重载 new / delete 来改变默认行为。 重载 new 和 delete基本形式类可以定义自己的 operator new 和 operator delete...
C++_用于大型程序的工具
用于大型程序的工具在大型程序中,除了基本语法、类、模板、STL 之外,还需要一些更“工程化”的机制来帮助我们: 处理运行时错误 组织大量名字,避免冲突 表达更复杂的类层次结构 常见内容有: 异常处理 命名空间 多重继承与虚继承 异常处理为什么需要异常处理程序运行时可能出现各种错误,例如: 文件打不开 输入非法 内存分配失败 下标越界 类型转换失败 如果只靠返回值处理错误,会有几个问题: 容易遗漏检查 正常逻辑和错误处理混在一起 一层层传递错误很麻烦 因此 C++ 提供了: 异常处理机制(exception handling) 异常处理的核心思想异常处理把“正常逻辑”和“错误处理逻辑”分离开。 基本机制: throw:抛出异常 try:监控可能出错的代码 catch:捕获并处理异常 基本语法123456try { // 可能出错的代码}catch (异常类型 变量) { // 处理异常} 例如: 123456try { throw runtime_error("something...
C++_标志库特殊设施
标准库特殊设施总览这一部分常见的标准库“特殊设施”包括: tuple:把多个不同类型的值打包成一个对象 bitset:按位存储和操作固定大小的二进制位集合 正则表达式:进行字符串模式匹配 随机数库:生成随机数与随机分布 IO 其他功能:格式控制、未格式化 IO、随机访问 可以把它们理解为: 不是容器/算法主线,但非常常用的标准库工具 tuple 类型什么是 tupletuple 是一个固定大小、可包含不同类型元素的对象。 它和 pair 很像,但比 pair 更一般: pair 只能放 2 个值 tuple 可以放任意多个值 例如: 1tuple<int, string, double> t(1, "Tom", 95.5); 头文件1#include <tuple> 基本定义12tuple<int, string, double> t1;tuple<int, string, double> t2(1, "Alice", 88.5); 也可用 make_tuple 创...
C++_模板与泛型编程
模板与泛型编程概念模板(template)可以理解为: 生成类或函数的蓝图 模板本身不是具体的类或函数,而是告诉编译器: 如果用户给我某种类型/某个值 我就按这个模板生成对应的类或函数 泛型编程的核心思想泛型编程强调: 写一份通用代码,适用于多种类型 例如: vector<int> vector<string> find sort 这些都依赖模板机制。 模板的实例化当我们真正使用模板时,编译器会把模板“变成”具体版本,这个过程叫: 实例化(instantiation) 例如: 1vector<int> v; 会实例化出 vector<int> 这个具体类。 1compare(1, 2); 会实例化出一个针对 int 的 compare 函数。 函数模板函数模板是用来生成一组函数的公式。 基本定义你原文里 template 拼错了,正确写法是: 123456template <typename T>int compare(const T& v1, const T& v2) ...
Vim基础
Vim 的模式Vim 有多个模式,最常用的是以下三种: 模式 说明 如何进入 普通模式 默认模式,用于移动光标、复制粘贴、删除等操作。 启动 Vim 时自动进入,或按 Esc 返回。 插入模式 用于输入文本。 按 i、a、o 等键进入。 可视模式 用于选择文本块,然后进行复制、删除等操作。 按 v(字符选择)、V(行选择)进入。 命令行模式 用于执行保存、退出、搜索、替换等命令。 在普通模式下按 : 进入。 核心原则:大部分时间停留在普通模式,需要输入文本时切换到插入模式,输入完成后按 Esc 返回普通模式。 启动与退出 命令 说明 vim filename 打开(或创建)文件并进入普通模式 :q 退出(如果文件未修改) :q! 强制退出,不保存修改 :w 保存文件 :wq 或 :x 或 ZZ 保存并退出 :e filename 打开另一个文件(在当前 Vim 中) 光标移动(普通模式)基本移动 按键 说明 h 左移一个字符 j 下移一行 k 上移一行 l 右移一个字符 0 移动到行首 ^...
C++_面向对象设计
面向对象设计(OOP)OOP 概述C++ 面向对象程序设计的三个核心概念: 数据抽象 继承 动态绑定(多态) 数据抽象数据抽象强调: 接口与实现分离 即类只暴露“能做什么”,隐藏“怎么做”。 继承继承强调: 描述类型之间的共同点和差异 基类描述公共部分,派生类描述特有部分。 动态绑定(多态)动态绑定强调: 用统一接口处理不同类型对象 同样是基类指针/引用,运行时可表现出不同派生类行为。 继承:基本概念具有继承关系的类形成一个层次结构。 位于上层的是 基类(base class) 从基类继承得到的是 派生类(derived class) 基类负责什么基类通常负责定义: 所有派生类共有的数据 所有派生类共有的接口 派生类负责什么派生类通常负责: 添加自己的新成员 重新定义(覆盖)某些虚函数 表现出与基类不同的具体行为 继承的写法1234567891011121314151617class Base {public: virtual int get_age() const { return age_; ...
Linux基础命令
Linux 基础命令命令基本格式1命令 [选项] [参数] 选项:以 - 或 -- 开头,用于修改命令的行为。 参数:命令操作的对象,如文件名、目录名等。 1. 文件与目录操作 命令 说明 常用示例 ls 列出目录内容 ls -l 长格式显示ls -a 显示所有文件(包括隐藏文件)ls -lh 以人类可读方式显示文件大小 cd 切换工作目录 cd /home/user 进入指定目录cd .. 返回上一级目录cd ~ 或 cd 返回家目录 pwd 显示当前工作目录的绝对路径 pwd mkdir 创建目录 mkdir dir 创建单个目录mkdir -p a/b/c 递归创建多级目录 rmdir 删除空目录 rmdir emptydir touch 创建空文件或更新文件时间戳 touch file.txt 创建空文件 cp 复制文件或目录 cp file1 file2 复制文件cp -r dir1 dir2 递归复制目录cp -i file1 file2 覆盖前提示 mv 移动或重命名文件/目录 mv oldname newnam...








