现代C++笔记杂谈系列
文章平均质量分 92
charlie114514191
我是一个普通的嵌入式软件程序员,喜欢研究Linux(应用层跟内核从都有粗浅的涉略),单片机,操作系统和计算机体系架构等内容,目前是一枚普通的本科生。
笔者是一个朴素的开源主义者,我坚信代码和知识没有壁垒,也不应该有壁垒所在,任何人都应该平等的获取到所有的知识。笔者力所能及的将自己的代码项目开源到Github
笔者的github:https://github.com/Charliechen114514
笔者的私人博客(旧):https://charliechen114514.github.io/
笔者的私人博客(新):https://www.charliechen114514.tech/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ STL CookBook
我们下面来聊一聊C++17新加入的filesystem。STL 文件系统库的目的是跨平台规范化文件系统操作。文件系统库旨在规范化操作,弥合 POSIX/Unix、Windows 和其他文件系统之间的不规则性。文件系统库是从相应的 Boost 库中采用的,并通过 C++17 合并到 STL 中。在撰写本文时,它在某些系统上的实现仍然存在差距,但本章中的配方已经在 Linux、Windows 和 macOS 文件系统上进行了测试,并分别使用 GCC、MSVC 和 Clang 编译器的最新版本进行编译。该库使用。原创 2024-12-24 08:33:41 · 669 阅读 · 0 评论 -
C++ STL CookBook
比如说,我们想要生成一个有特殊含义的值,为了表达它是否有效,一个经典的做法要么是返回一个非法值(类似于-1),要么就是返回一个结构体存储其是否有效(但是受困于其信息存在潜在的不同步性)std::this_thread::sleep_for(std::chrono::seconds(2));// 存储一个 string 值。// 存储 string。原创 2024-12-23 09:55:54 · 1529 阅读 · 0 评论 -
C++ STL CookBook 11
字符串、流和格式 STL 字符串类是一个功能强大、功能齐全的工具,用于存储、操作和显示基于字符的数据。它具有高级脚本语言的许多便利性,同时又保持了 C++ 所期望的快速和敏捷性。字符串类基于 basic_string,这是一个可以使用任何字符类型实例化的连续容器类。其类签名如下所示:Traits 和 Allocator 模板参数通常保留其默认值。basic_string 的底层存储是 CharT 的连续序列,可以使用 data() 成员函数访问(就是一个字符数组):++i) {原创 2024-12-13 13:37:07 · 1024 阅读 · 0 评论 -
C++ STL Cookbook STL算法
(写在前面:笔者前段时间备战考试和比赛了,现在回来继续更新)STL实际上提供了非常非常丰富的算法库,笔者这里打算记录如下几个比较常见的STL算法库。原创 2024-12-12 09:30:16 · 792 阅读 · 0 评论 -
从0开始的数据结构速过——番外(1)
这是《数据结构从0开始》的一个番外。实际上是介绍一下一些现代C++的写法。这里以快速构建std::array作为契机来说明一下一些现代C++的语法。原创 2024-11-18 21:19:58 · 1125 阅读 · 0 评论 -
C++STL CookBook 系统理解Lambda系列(1)
在C++11中,我们引入了一个有用的语法:lambda表达式。此功能允许在表达式上下文中使用匿名函数。Lambda 可用于函数调用、容器、变量和其他表达式上下文。我们调用这个表达式,就会得到一个"Hello\n"的字符串了Lambda有意义的点在于,它可以变成一个函数对象传递:func(demo);甚至是Lambda调用Lambda。原创 2024-11-18 08:16:49 · 995 阅读 · 0 评论 -
STL C++ CookBook 7:迭代器简论
适配器返回一个模拟迭代器的对象,在本例中为 std::back_insert_iterator 对象,每次为迭代器分配值时,该对象都会调用容器对象上的 push_back() 方法。copy() 算法需要三个迭代器:begin 和 end 迭代器指示要从中复制的元素范围,begin 迭代器指示目标范围。begin() 迭代器指向初始容器元素,end() 迭代器指向最终元素之后,这就让end() 迭代器可以充当长度不确定的容器的哨兵。这些类别是分层的,其中功能更强大的迭代器继承了功能较弱的迭代器的功能。原创 2024-11-17 08:15:51 · 702 阅读 · 0 评论 -
C++20 STL CookBook 7 Containers(II)
对于有序映射,键的类型必须是可排序的,这意味着它必须至少支持小于 < 比较运算符。假设您想要使用具有不可排序的自定义类型的关联容器。例如,向量 (0, 1) 不小于或大于 (1, 0),它只是指向不同的方向。在这种情况下,您仍然可以使用 unordered_map 类型。让我们看看如何做到这一点。我们现在呢,把Key设置为一个坐标:int x{};int y{};我们知道unordered_map还需要第三个模板参数:template原创 2024-11-13 15:18:16 · 1491 阅读 · 0 评论 -
C++ STL CookBook 6:STL Containers (I)
在我们开始之前,先来回顾一下传统的经典的几个容器!原创 2024-11-10 21:54:33 · 849 阅读 · 0 评论 -
C++ STL CookBook 5 Span,结构化绑定与自动模板推导小论
模板参数推导发生在模板函数或类模板构造函数(从 C++17 开始)中,当参数的类型足够明确时,编译器可以自动推导出模板类型,而无需显式指定模板参数。不得不承认实在是有点抽象,写的太累了。_STL_VERIFY(_RANGES size(range) == _Extent, "无法从范围构造具有静态范围的 span");_STL_VERIFY(count == _Extent, "无法构造具有静态范围的 span,范围大小不一致");它的存在是有趣的,因为我们现在可以拿到任何一个连续的容器的span视图了。原创 2024-11-05 09:27:31 · 1187 阅读 · 0 评论 -
C++20 STL CookBook 4:使用range在容器中创建view
举个例子:我们阅读一个文件,我们实际上对文件的资源在谁手上完全不关心,我们只知道现在我们可以看到文件中的一串一串难懂的字符(透过库,自己搓的,标准库的接口),比如说一份介绍std::ranges的标准库说明手册。只要你能说出来一串相同的东西,能找到第一个和最后一个的,就是有限序列),那这样看,我们就马上想到:std::string作为一个经典的字符串,实际上就是一个字符数组的高级封装。现在我们安心的查看,就是我们的要求!所以,毫无疑问的,std::vector是这样的,std::list是这样的,等等!原创 2024-11-04 20:14:24 · 1872 阅读 · 0 评论 -
C++ STL CookBook3 概念 + Module小论
模板实在是很自由!编写与不同类型兼容的代码。例如,下面的函数可以处理任何数值类型:但是,当你使用非数值类型调用它时,结果可能会非常不确定或者出人意料:// 输出结果不可靠在C++20中,使用requires关键字,可以为模板应用约束,从而避免此类问题。定义一个只接受数值类型的概念如下:然后,可以使用该概念来约束模板函数:");return 0;这样,当使用非数值参数编译代码时,编译器将生成更有用的错误信息。你也可以在类模板和变量模板中使用概念。原创 2024-11-04 20:13:46 · 719 阅读 · 0 评论 -
C++20 STL CookBook2 更强大的编译时 + 安全比较 + spaceship比较符
问题是 x 是有符号的,而 y 是无符号的。事实上,将无符号值转换为相同大小的有符号值,因为有符号整数使用二进制补码表示法(使用最高有效位作为符号)。给定相同大小的整数,最大有符号值是无符号值的一半。使用此示例,如果整数是 32 位,-3(有符号)将变为 FFFF FFFD(十六进制),或 4,294,967,293(无符号十进制),不小于 7。在 C++20 之前,这仅限于用文字值初始化的对象或有限约束内的函数。它的真正威力在于它作为对象的统一比较运算符的应用。标头中的一个对象,与 0 进行比较。原创 2024-11-04 20:12:49 · 1292 阅读 · 0 评论 -
C++20 STL CookBook读书笔记1
我们还可以定义自己的类的输出方式,办法是老老实实的重载我们的模板类std::formatter的偏特化的类。以一个我们想要表达的分数的结构体作为示例,我们来试试看:/**/templatereturn 0;请注意!务必保证函数的签名完全对的上,否则SAFNAE了给你炸一个static_assert failed连问题出在什么地方都不知道。原创 2024-10-22 20:36:29 · 1557 阅读 · 0 评论
分享