C++编程专栏
介绍现代C++语法,数据结构,算法,STL用法
黑不溜秋的
GPU全栈博主-程序哥。
展开
-
C++ 在项目中使用Git
【代码】C++ 在项目中使用Git。原创 2024-09-10 14:16:47 · 496 阅读 · 1 评论 -
C++ STL 随机数用法介绍
目录一:C语言中的随机数二:C++中的随机数 1. 生成随机数的例子 2. 随机数引擎 3. 随机数引擎适配器 4. C++中预定义的随机数引擎,引擎适配器 5. 随机数分布二:C++中的随机数 1. 生成随机数的例子 2. 随机数引擎 引擎 说明 random_device 真随机数(非基于软件生成器),通常用来产生随机种子 linear_congruential_en原创 2024-07-07 14:32:24 · 205 阅读 · 0 评论 -
C++ STL 多线程库用法介绍
【代码】C++ STL 多线程库用法介绍。原创 2024-07-07 11:35:45 · 468 阅读 · 0 评论 -
C++ STL 时间日期用法介绍
C++ 标准库提供了Time Library,它由时间点,时间段,时钟三部分组成,此外,该库还提供了日期功能,日历支持,时区支持,以及输入和输出。原创 2024-07-06 19:12:49 · 177 阅读 · 0 评论 -
C++ STL 正则表达式用法介绍
【代码】C++ 正则表达式(std::regex_search使用)原创 2024-06-18 00:10:01 · 751 阅读 · 0 评论 -
C++ 一个反射的例子
在 C++ 中实现反射机制,虽然不像其他高级语言那样直接,但可以通过宏、模板和注册系统等技术来实现一个简易的反射系统。下面是一个完整的 C++ 反射机制示例,通过自定义类注册系统和宏定义,实现类的名称、属性、方法的反射。原创 2024-10-15 23:58:13 · 287 阅读 · 0 评论 -
C++ 在项目中使用GDB
GDB的 TUI (Text User Interface)模式提供了一种图形化的调试体验,允许在终端中同事显示源代码,寄存器和汇编代码等信息,下面是GDB TUI的基本操作和快捷键。1. 显示源代码窗口:(gdb) layout src。3. 显示汇编代码窗口:(gdb) layout asm。2. 显示寄存器窗口:(gdb) layout regs。4. 关闭源代码窗口: Ctrl + X 然后按 A。原创 2024-10-14 16:55:33 · 859 阅读 · 0 评论 -
C++ 二叉搜索树转换为双向链表
【代码】C++ 二叉搜索树转换为双向链表。原创 2024-10-09 14:19:33 · 130 阅读 · 0 评论 -
C++ 语言特性30 - 模板介绍
允许定义可以接受不同类型参数的函数。函数模板在调用时根据参数类型进行实例化。2.允许定义可以接受不同类型参数的类。类模板在创建对象时根据类型参数进行实例化。允许为特定类型提供不同的实现,称为模板特化。可以是完全特化或偏特化。模板可以使用非类型参数,例如整数常量。5.在 C++11 之前,模板还可以用于编写编译时计算的元编程,例如计算阶乘、斐波那契数列等。原创 2024-10-05 19:26:11 · 742 阅读 · 1 评论 -
C++ 语言特性29 - 协程介绍
C++20 引入了协程(),这是 C++ 标准库中一个强大的新特性。协程是一种可以在执行中暂停并随后恢复的函数,允许程序在异步或并行场景下高效管理任务,而不需要传统的线程或复杂的回调机制。协程是可以暂停其执行并保存其当前状态,稍后可以从该位置恢复执行的特殊函数。在某种程度上,协程类似于普通函数,但它们的执行流可以通过co_awaitco_yield或co_return来暂停和恢复。这与传统函数的行为不同,传统函数一旦开始执行,就会一直运行到返回或退出为止。原创 2024-10-05 16:55:55 · 1077 阅读 · 0 评论 -
C++ 语言特性28 - 属性介绍
C++ 属性(Attributes)是 C++11 引入的一种机制,允许开发者向代码中添加一些额外的信息,以便编译器或工具可以进行静态检查、优化或生成警告等。与传统的编译器特定的#pragma指令相比,C++ 属性更加标准化,并提供了更好的可移植性。C++ 的属性通过[[...]]的形式定义。原创 2024-10-05 16:24:27 · 972 阅读 · 0 评论 -
C++ 语言特性27 - alignas 数据对齐介绍
是指在内存中存储数据时,如何为数据分配地址,确保其满足 CPU 对内存访问的要求。不同的处理器对数据的存储位置(内存地址)有一定的要求,特别是对于多字节的数据类型(如intfloatdouble等),它们往往需要存放在特定的边界上。这种边界通常是数据大小的倍数,称为对齐边界。数据对齐的主要目的是提高内存访问的效率,并减少由于不对齐访问带来的性能损耗。原创 2024-10-05 11:48:17 · 270 阅读 · 0 评论 -
C++ 语言特性26 - 字面量介绍
C++11 允许开发者定义自定义字面量,主要用于增强代码的可读性。例如,可以通过用户定义字面量来创建单位表示法,如秒、米等。原创 2024-10-05 11:35:28 · 417 阅读 · 0 评论 -
C++ 语言特性25 - 表达式求值顺序
在 C++17 之前,C++ 中有“顺序点”(sequence point)的概念,表示某些操作之间有明确的顺序,保证在这些顺序点之前的操作一定会完成。顺序点(Sequence Points)是 C++ 标准中的一个概念,表示程序中某些操作必须在某些特定的时间点之前或之后完成。在顺序点之前的所有副作用(如变量的修改)都必须完成,而顺序点之后的操作都要从一个新的状态开始。原创 2024-10-05 10:48:33 · 95 阅读 · 0 评论 -
C++ 语言特性24 - inline 和 static 关键字
它的主要作用是建议编译器在调用处。原创 2024-10-05 10:05:41 · 163 阅读 · 0 评论 -
C++ 语言特性23 - thread_local
是 C++11 引入的用于声明的存储类型说明符。它可以用来声明一个变量,使其在每个线程中有独立的实例,这样每个线程对该变量的修改都只会影响自己的副本,而不会影响其他线程的值。修饰的变量在每个线程中都有一份独立的拷贝,这个变量的生命周期与线程相同:线程开始时初始化,线程结束时销毁。原创 2024-10-05 09:07:15 · 658 阅读 · 0 评论 -
C++ STL iota 和 atoi 用法
atoi 是将字符串转换成整数;atol, atoll 将字符串转换成长整型数 long,long long。iota 是给定一个初始元素,然后依次对序列中每个元素进行递增++操作,详见代码一;原创 2024-08-02 12:28:42 · 295 阅读 · 0 评论 -
C++ 语言特性22 - 三向比较
虽然default的三向比较运算符适合大多数情况,但你也可以自定义它来实现复杂的比较逻辑。// 自定义三向比较运算符cmp!原创 2024-10-05 08:04:13 · 386 阅读 · 0 评论 -
C++ 语言特性21 - 别名模板
使用别名模板可以为智能指针(如。原创 2024-10-05 07:38:00 · 459 阅读 · 0 评论 -
C++ 语言特性20 - noexcept 关键字
noexcept是 C++11 引入的一个关键字,用来指明一个函数在运行时是否。它主要用于提高代码的安全性和性能,在某些场合可以帮助编译器进行优化。原创 2024-10-04 21:45:08 · 620 阅读 · 0 评论 -
C++ 语言特性19 - 结构化绑定
C++17 引入了(Structured Bindings),这是一个非常实用的语法特性,它允许我们将一个对象(通常是一个复合类型,如数组、元组、pair、结构体等)解构为多个变量,从而更加方便地访问其内部成员。结构化绑定使代码更加简洁和可读,尤其是在处理多返回值函数或复杂数据结构时。原创 2024-10-04 20:46:20 · 339 阅读 · 0 评论 -
C++ 语言特性18 - static_assert 介绍
在 C++ 中,是一种用于在进行断言的机制,确保某些编译时条件成立。如果条件不成立,则编译器会生成错误,阻止代码的编译。在 C++11 中引入,目的是帮助程序员在编译时捕捉逻辑错误,而不是等到运行时。它通常用于模板元编程、类型检查以及编译时常量计算等场景。原创 2024-10-04 19:36:35 · 383 阅读 · 0 评论 -
C++ 语言特性17 - constexpr
constexpr是 C++11 引入的关键字,用于在编译时评估表达式并生成常量值。这可以提高性能和代码的可读性,减少运行时计算。原创 2024-10-04 16:18:24 · 332 阅读 · 0 评论 -
C++ 语言特性16 - 带初始化状态的if和switch
1. 语法规则2. 例子。原创 2024-10-04 09:07:27 · 217 阅读 · 0 评论 -
C++ 语言特性15 - 基于范围的for循环
为了在自定义类中支持基于范围的for循环,需要确保自定义类可以被迭代。这通常意味着需要提供begin()和end()方法,这样标准库的std::begin和std::end就可以使用这些方法来获取迭代器。定义迭代器:为自定义类定义一个迭代器,这个迭代器至少需要支持++和!操作。提供begin()和end()方法:在自定义类中提供begin()和end()方法,它们分别返回指向第一个元素和末尾的迭代器。(可选)支持const迭代器:如果希望自定义类在const上下文中也能被迭代,应该提供const版本的。原创 2024-10-04 08:37:39 · 393 阅读 · 0 评论 -
C++ 语言特性14 - override 和 final 关键字
override关键字用于确保派生类中的函数正确地重写了基类中的虚函数。原创 2024-10-04 07:50:30 · 443 阅读 · 0 评论 -
C++ 语言特性13 - 强枚举类型
枚举值可以隐式转换为整数,也可以从整数隐式转换为枚举类型,这可能导致类型安全问题。枚举类成员不能隐式转换为整数或其他类型,必须使用显式类型转换。:C语言中的枚举成员是公开的,这意味着它们在枚举类型定义的作用域内是可见的,并且可以不加区分地访问。:强枚举的成员被限定在枚举类型的作用域内,必须使用枚举类型名称和作用域解析运算符(:枚举类型可以与整数进行赋值和比较操作,枚举值之间也可以直接比较。:枚举值可以隐式转换为整数,整数也可以隐式转换为枚举类型。:强枚举类型与整数之间的转换需要显式进行,不能隐式转换。原创 2024-10-04 06:34:09 · 377 阅读 · 0 评论 -
C++ 语言特性12 - 联合体类型
C和C++中的联合体概念是类似的,联合体允许在同一个内存位置存储不同的数据类型,即多个对象共享同一片内存。但是,C++11对union进行了扩展,使其更加灵活和强大。以下是C语言和C++11中union。原创 2024-10-03 11:58:27 · 393 阅读 · 0 评论 -
C++ 语言特性11 - 继承构造函数
如果派生类定义了自己的构造函数,那么与基类构造函数具有相同签名的继承构造函数将被覆盖。原创 2024-10-03 11:34:24 · 523 阅读 · 0 评论 -
C++ 语言特性10 - 委托构造函数
在C++中,委托构造函数(Delegating Constructor)是一种特殊的构造函数,它在构造函数的初始化列表中调用同一个类中的另一个构造函数,从而实现代码的复用。这种特性在C++11中引入。public:// 委托构造函数// 委托给另一个构造函数// 被委托的构造函数// 初始化代码。原创 2024-10-03 09:00:45 · 695 阅读 · 0 评论 -
C++ 语言特性09 - 默认构造函数
在C++中,POD是“Plain Old Data”的缩写,指的是最普通的C++数据类型和对象。POD类型包括了C++中的原始数据类型(如intdouble等)、POD结构体(不含用户定义的构造函数、虚函数、静态成员、引用成员等的类)、POD联合体、POD数组以及它们的数组。不包含用户自定义的构造函数:POD类型不能包含任何构造函数。不包含虚函数:POD类型不能包含任何虚函数。不包含静态成员变量:POD类型不能包含静态成员变量。不包含引用成员:POD类型不能包含引用类型的成员。不包含常量成员。原创 2024-10-03 08:05:01 · 657 阅读 · 0 评论 -
C++ 语言特性08 - 非静态成员的初始化
1. 对于基本数据类型(如intfloat等),如果在构造函数初始化列表中没有明确初始化,那么它们会被默认初始化为零。2. 对于类类型,如果没有提供构造函数初始化列表,那么成员变量将调用其默认构造函数。3. 如果类中包含对象类型的成员变量,并且没有在构造函数初始化列表中显式初始化,那么这些对象成员将调用它们自己的默认构造函数。4.C++11引入了统一初始化(也称为列表初始化),建议使用构造函数初始化列表来初始化成员变量,以避免潜在的初始化顺序问题。原创 2024-10-02 08:22:02 · 758 阅读 · 0 评论 -
C++ 语言特性07 - 静态成员的初始化
1. 静态成员变量通常在类定义内部声明,并在类定义外部定义和初始化。2. 从C++11开始,可以在类内直接初始化静态数据成员(对于基本数据类型和枚举类型)。这被称为。3. 静态成员变量的初始化在main函数执行之前,且在任何对象创建之前完成。这意味着在任何对象构造之前,静态成员已经被正确初始化。4. 静态成员函数可以访问静态成员变量,但不能访问非静态成员变量。5. 静态成员变量的初始化是线程安全的。C++标准保证在任何线程开始运行之前,静态成员变量已经被初始化。原创 2024-10-02 08:01:46 · 389 阅读 · 0 评论 -
C++ 语言特性06 - lambda表达式
1. lambda表达式语法, lambda表达式是在C++11标准中引入的,它们可以捕获外部变量的值或引用。2. lambda表达式的例子3. 什么是无状态的正则表达式, 一个例子。原创 2024-10-01 22:44:03 · 432 阅读 · 0 评论 -
C++ 语言特性05 - 右值引用
右值引用是 C++11 引入的一种新特性,主要用于实现移动语义,从而优化资源管理和性能。原创 2024-10-01 11:20:03 · 427 阅读 · 0 评论 -
C++ 语言特性04 - decltype关键字
decltype是 C++11 引入的一个关键字,用于查询表达式的类型,而不对表达式进行求值。它的主要作用是在编译时确定变量或表达式的类型,非常适合在模板编程和泛型编程中使用。原创 2024-10-01 10:26:39 · 466 阅读 · 0 评论 -
C++ 语言特性03 - auto 关键字
在C++中,auto关键字用于自动推动变量的类型,这样可以减少代码中的冗余,尤其是在声明复杂类型时。原创 2024-10-01 09:42:42 · 349 阅读 · 0 评论 -
C++ 在项目中使用Shell 脚本
本文介绍下Shell 脚本语法,以便在项目中使用 Shell 脚本。原创 2024-09-11 18:02:32 · 207 阅读 · 0 评论 -
C++ 在项目中使用Linux命令
Linux 命令是由shell解析并转发给操作系统执行的,所有的shell都是从 Bourne shell(/bin/sh)派生的,Bourne shell是贝尔实验室为早期版本的Unix开发的标准shell。每个Unix系统都需要一个版本的Bourne shell才能正常工作。现在的Linux使用Bourne shell的增强版本,称为bash。bash shell是大多数Linux发行版上的默认shell。原创 2024-09-11 12:18:32 · 213 阅读 · 0 评论 -
C++ STL find_end 用法
给定两个序列A和B,用于在序列 A 中查找序列 B 最后一次出现的位置。原创 2024-09-03 06:44:11 · 196 阅读 · 0 评论