avatar
Articles
208
Tags
34
Categories
25
Home
Tags
Categories
About
Archives
Share
FenglielieCpp 笔记汇总 Back to Home
Search
Home
Tags
Categories
About
Archives
Share

Cpp 笔记汇总

Created2025-05-18|Updated2025-09-09|misc
|Word Count:686|Reading Time:2mins
  • Cpp 进阶笔记
    • Cpp 进阶笔记——1.右值引用
    • Cpp 进阶笔记——2.移动语义
    • Cpp 进阶笔记——3.引用折叠、万能引用和完美转发
  • Cpp 构建和编译笔记
    • Cpp 构建和编译笔记——1. 编译过程
    • Cpp 构建和编译笔记——2. 头文件和库
    • Cpp 构建和编译笔记——3. gcc 选项
    • Cpp 构建和编译笔记——4. make 与 Makefile
    • Cpp 构建和编译笔记——5. CMake 与 CMakeLists
    • Cpp 构建和编译笔记——6. CMake 基本语法
    • Cpp 构建和编译笔记——7. CMake 语法结构
    • Cpp 构建和编译笔记——8. CMake 依赖管理
    • Cpp 构建和编译笔记——9. CMake 库的开发
  • Cpp 配置笔记
    • GCC 源码编译安装(离线,普通用户)
    • Cpp 编译环境笔记
    • Visual Studio 简单使用记录
    • VSCode Cpp 配置
    • Windows Cpp 编程中的几个问题
  • Cpp 函数 API 设计
  • Cpp 可调用对象笔记
  • Cpp const* 关键词
  • Cpp 奇异递归模板模式 CRTP
  • Cpp 函数参数默认值
  • C/Cpp 枚举类与强枚举类
  • Cpp 异常处理
  • Cpp std::format 学习笔记
  • Cpp 历史介绍与学习资源
  • Cpp lambda表达式笔记
  • Cpp 显式加载动态库
  • Cpp 日志库 spdlog 配置与使用
  • Cpp Most vexing parse
  • Cpp MPI学习笔记
  • Cpp 命名空间
  • Cpp new/delete 语句
  • Cpp 函数重载与函数标识符
  • Cpp 并行计算学习笔记
  • Cpp Pimpl 模式
  • C/Cpp 输出语句的变迁
  • Cpp 单例模式
  • Cpp 智能指针
  • Cpp static+extern+inline 学习笔记
  • Cpp 结构化绑定 学习笔记
  • GoogleTest + CTest 配置与使用
  • Cpp std::tuple 学习笔记
  • Cpp 基本数据类型
  • Cpp 类型转换
  • C/Cpp 类型别名
  • Cpp 未定义行为/小坑/冷知识
  • Cpp 值封装类型学习笔记
  • Cpp 面向对象
    • Cpp 面向对象——访问和继承权限
    • Cpp 面向对象——三大特性和 C 语言实现
    • Cpp 面向对象——重定义与重写、虚函数
    • Cpp 面向对象——成员函数中的 this
    • Cpp 面向对象——虚函数进阶
  • Cpp 设计模式笔记
    • Cpp 设计模式笔记——1. 概述
    • Cpp 设计模式笔记——2. 创建型模式
    • Cpp 设计模式笔记——3. 结构型模式
    • Cpp 设计模式笔记——4. 行为型模式(一)
    • Cpp 设计模式笔记——5. 行为型模式(二)
    • Cpp 设计模式笔记——6. 更多模式
    • Cpp 设计模式笔记——7. 相关概念
  • Cpp 多线程学习笔记
    • Cpp 多线程学习笔记——1. 线程
    • Cpp 多线程学习笔记——2. 互斥锁
    • Cpp 多线程学习笔记——3. 原子操作
    • Cpp 多线程学习笔记——4. 条件变量
    • Cpp 多线程学习笔记——5. future 异步编程
Author: Fenglielie
Link: https://fenglielie.top/p/f25d5133/
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Cpp
cover of previous post
Previous
基于 Markdown / Jupyter 生成幻灯片
Marp 简单介绍 Markdown → 幻灯片 可导出 PDF / HTML 适合讲义、科研展示、课程分享 使用方式 VS Code 安装 Marp 插件(推荐) npm 安装 Marp CLI 基本语法 基于现有的 Markdown 文件略微修改即可 使用 --- 分页,前后最好有单独空行 在头部添加元信息进行全局配置 1234567---marp: truetheme: gaiapaginate: true---... 配置 Marp 支持的配置包括全局配置和局部配置,前者出现在头部,后者出现在对应的分页。 在Markdown头部支持添加如下形式的元信息进行全局配置 12345---marp: truetheme: gaiapaginate: true--- 具体含义为: marp:true 开启 Marp 渲染(这是唯一的必选项) theme: default、gaia、uncover 几个内置主题 paginate:true、false 是否显示页码 在具体分页则可以使用html注释形式添加对应的局部配置,例如: 用大字体样式(通常用于封面) 1<...
cover of next post
Next
Numpy 学习笔记之三
NumPy 提供了比较丰富的线性代数运算功能,主要集中在 numpy.linalg 模块中,下面罗列一些基础的操作,主要针对一维和二维数组,对于其它高维数组的语义可能不太符合直觉。 重要函数 点积 np.dot np.dot() 函数可以计算两个向量的点积,最基本的用法例如 1234a = np.array([1, 2, 3], dtype=np.float64)b = np.array([4, 5, 6], dtype=np.float64)np.dot(a, b) # np.float64(32.0)# 1*4 + 2*5 + 3*6 = 32 np.dot(a, b)的完整语义需要根据两个数组的维度来区分: 第一类情况: 如果其中一个是标量,那么就是进行(逐元素的)乘法,等效于 np.multiply(a, b) 或 a * b。 第二类情况: 如果 a 是 \(N\) 维数组,b 是一维数组,那么会沿着两者的最后一个轴求和,得到 \(N-1\) 维数组。 (特例,标准情况)如果两者都是尺寸为 (m,) 的一维数组,那么就是标准的向量内积,结果是一个标量。 (特例...
Related Articles
cover
2025-03-10
Cpp 多态方案对比——回字的四种写法
虽然C++没有直接提供interface,但是却提供了虚函数、模板类型等各种语法,使得我们可以用各种方式实现多态,这里我们不区分动态多态和静态多态,而是从设计一个框架的角度,分别使用四种方案实现: 虚函数(最简单直接的方式) std::function CRTP(最晦涩的方式) deducing this(可以视作CRTP的简化,不再需要将派生类作为模板参数传递,要求C++23) 需求 我们考虑这样一个需求: 基类A包括:(不可实例化) 主方法run:调用func1,func2和func3 实现方法func1 实现方法func2(多态,允许子类修改) 实现方法func3(多态,子类必须实现) 派生类B1:继承A 实现方法func3(多态,允许子类修改) 派生类B2:继承A 实现方法func3(多态,允许子类修改):调用func4 实现方法func4(多态,允许子类修改) 具体类C1:继承B2 实现方法func4 具体类C2:继承B2 实现方法func3 最终我们直接通过各种对象自身来调用run方法,达到如下效果: 12345678Running B1 ...
cover
2024-05-14
不同编程语言的相互调用
记录一下各种语言之间简单地进行相互调用的做法。 Cpp 调用 Python 在C++程序中调用Python解释器,包括执行简单Python语句(字符串形式),以及执行整个py脚本(文件形式)。 执行简单命令 最简单的例子:调用Python解释器,输出HelloWorld,C++源文件如下 main.cpp12345678910111213141516#ifdef _DEBUG#undef _DEBUG#include <Python.h>#define _DEBUG 1#else#include <Python.h>#endifint main() { Py_Initialize(); PyRun_SimpleString("print('Hello, world! (from Python)')"); Py_Finalize(); return 0;} 注意在导入Python.h时进行了一些处理,因为我们的电脑中通常只有Release版本的Python库,并没有Debug...
cover
2025-08-04
DLL 注入攻击
概念介绍 DLL 注入攻击(DLL Injection)是一种将动态链接库(DLL)强制加载到目标进程中的技术,使得攻击者编写的代码能在目标进程的地址空间中运行。 在 Windows 中,DLL 注入是系统提供的合法功能,主要用于调试器和辅助工具,但也可以被用于攻击,不过这种攻击手段是非常明显且初等的,一般的防护软件都会阻止这种行为。 简易实现 可以使用最经典的 CreateRemoteThread + LoadLibraryA 方法实现 DLL 注入攻击,下面是主要的代码思路。 代码参考:idea4good/AbuCoding Loader 目标是让目标进程(这里以记事本Notepad.exe为例)加载提供的 DLL,实现步骤: 查找并获取目标进程句柄:使用 CreateToolhelp32Snapshot 遍历系统进程列表;调用 OpenProcess(PROCESS_ALL_ACCESS, ...) 在目标进程分配内存并写入 DLL 路径:VirtualAllocEx 为 DLL 路径字符串留空间;WriteProcessMemory 将 DLL 路径写到目标进程 获取 ...
cover
2023-12-09
Hanoi塔问题求解(递归与非递归算法)
Hanoi塔是经典的递归算法的应用,但是有意思的是我之前学习的算法或数据结构的课都漏掉了这个例子,补一下吧,包括两类三种算法实现。 问题介绍 Hanoi塔问题为:考虑三根杆子A,B,C,A杆上有 N 个 (N>1) 穿孔圆盘,圆盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆: 每次只能移动一个圆盘; 大盘不能叠在小盘上面。 问:如何移动?最少要移动多少次? 递归分析 重点关注最大的圆盘,它是整个任务的核心:虽然它在最底层不会影响别的圆盘的操作,但是将它从A移动到C时,必然其他N-1个盘都处于B。 据此可以把问题分解为三个子任务: 将N-1个圆盘从A移动到B,此时C可以用作临时存放区 将最大的圆盘从A直接移动到C 将N-1个圆盘从B移动到C,此时A可以用作临时存放区(和第一步的任务是等价的) 记\(f(n)\)为n个圆盘时最少的移动次数,显然有初值\(f(1)=1\),以及递推关系 \[ f(n) = 1 + 2f(n-1) \] 因此解得\(f(n)=2^n-1\)为最少移动次数。 这里的理论分析直接提供了递归算法的思路,但是理论分析的结果并非仅仅...
cover
2025-03-09
解读一份极其晦涩的c++代码
事先声明,下面的各种语法技巧都是炫技式的,刻意降低代码的可读性,只是写着玩,在实际应用中是不会允许这么乱写的。 先来几个开胃菜。 开胃菜 (1) 嵌入网址? 下面这段代码看起来是在c++中直接嵌入了一个网址 1234567#include <iostream>int main(){ https://www.zhihu.com std::cout << "Hello World!" << std::endl; return 0;} 它确实是合法的c++代码,但是含义却并不是网址: 左半部分https: 是一个标签,可以通过goto跳转; 右半部分由于//的存在,就是一个注释,直接被忽略了。 下面的代码就更利于理解了 123456789#include <iostream>int main() {label: // 这是注释 std::cout << "Hello World!" << std::endl; ...
cover
2023-01-18
Cpp练习——MTest测试框架(gtest的模仿实现)
主要参考了Google test(gtest)和知乎上的一篇文章qtest: 一个单元测试库的从头实现以及作者提供的代码,尤其是宏的部分。一直不喜欢也没有学明白宏的各种用法,但是实现这种风格的测试框架也绕不开宏。 在其基础上进行了整理和重构,并且扩展和完善了一些细节的功能。 本文作为 C++ 学习中的小练习,若有疏漏,欢迎指正。 MTest 介绍 MTest 是一个 header-only 的简易框架,只包含两个头文件: mtest.hpp 负责 MTest 和 MTest::MTestMessage 两个类的实现,不含有任何的宏。 mtest_macro.hpp 负责对外提供相应的宏,可以在编译时使用-DUNUSE_MTEST关闭所有的宏,避免与 gtest 产生冲突。 测试文件需要 include 这两个文件,include顺序无所谓,也可以直接合并成一个文件,但是我个人的喜好是对宏敬而远之,因此单独仍在一个头文件中。主要功能实现在mtest.hpp,其中不含有任何的宏。 为什么重复造轮子? 我希望将 MTest 作为 gtest 的简易替代,尤其是它具有 header...

Comments
avatar
Fenglielie
Writing is thinking.
Articles
208
Tags
34
Categories
25
© 2022 - 2025 By Fenglielie
皖ICP备2023005611号-1
Search
Loading Database