- 博客(192)
- 收藏
- 关注
原创 std::transform详解
std::transform是c++98引入的特性,这一个转换操作,它将输入范围内的每个元素通过指定的操作转换为新的值。在c++17版本对该特性引入了新的变化,即支持指定执行策略(并行执行、串行执行等),但是总体功能为发生变化。
2025-03-26 15:52:34
395
原创 std::reduce详解
reuduce的含义是规约,即将一系列元素通过某种操作组合成单个结果的过程。c++17引入了std::reduce函数。std::reduce与std::accumulate类似,不同的是std::reduce采用的并行方式进行运算,所谓并行就是在多个线程同时进行运算得到的结果的过程;std::accumulate是串行方式进行得到一个累积和。所以从这个角度来看,当数据量比较小时优先采用std::accumulate完成求和运算。当数据量比较大时,推荐采用std::reduce来完成计算。
2025-03-26 15:18:46
880
原创 std::clamp详解
/ 使用大于比较器(降序)std::cout << "使用greater比较器: " << value << std::endl;//输出为5// 自定义比较函数std::cout << "使用自定义比较器: " << abs_value << std::endl;//输出为10那如果使用了自定义比较器,就像上面的例子,那么clamp的比较逻辑是什么呢?请看下面的介绍。return v;结合上面的介绍,可以得到上面的例子输出分别为5和10.
2025-03-25 16:00:40
346
原创 std::sample详解
从一个大的数据集中采样部分数据集作为训练数据集,这一般用于神经网络训练的场景随机测试用例,即从一个测试用例集中随机的抽取一个或者多个测试用例。
2025-03-25 14:52:33
394
原创 std::filesystem详解
c++17引入了std::filesystem库,这是一个强大的文件系统操作工具,可以获取文件和目录的各种信息(文件名称、后缀、类型、大小,遍历目录等)。
2025-03-17 15:08:35
431
原创 std::invoke详解
std::invoke表示函数调用:只要调用std::invoke,且执行了这个语句,那么就相当于调用了传入的函数对象std::invoke的含义传入一个函数对象及这个函数对象的参数,然后通过std::invoke完成这个函数的调用std::invoke可以实现对函数对象的调用,达到与直接调用函数相同的效果如果要实现类似回调系统、事件系统类似的功能,需要集合模板来实现。
2025-03-14 15:32:10
597
原创 std::string_view详解
c++17版本引入了std::string_view特性,这是一个轻量级的字符串视图,提供了一个字符窜的只读视图,而不需要进行内存和复制。
2025-03-13 18:19:59
424
原创 std::optional详解
c++17版本引入了std::optional特性,这一个类模板,基本的使用方法如下:这个新特性的含义是利用std::optional<T>创建的某个类型的对象,这个对象存储某个类型的值,这个值可能存在,也可能不存在。
2025-03-09 20:39:05
201
原创 快速生成viso流程图图片形式
我们要善于利用大模型提高我们的效率这个方案的缺点是生成的是图片,应该还有其他可以直接导入PlantUml语言的软件,我这里没有寻找,如果大家找到了,请放到我的留言区,不胜感激。
2025-03-05 16:59:41
1984
原创 智能指针之std::shared_ptr<T>详解
std::shared_ptr对象是需要额外占用内存空间的,对象大小一般为2个指针变量的长度shared_ptr对象包含的是两个指针变量当shard_ptr对象数据库块指针的引用变量变为0时,自动触发ptr指向的数据块的内存释放。
2025-03-04 15:24:37
1086
原创 左值引用与指针的区别
很多朋友遇到过这个问题:左值引用与指针有哪些区别?脑子里闪过很多答案,但大部分都是各自的定义,真要说他们两个有什么区别,有的时候还这是说不上来。本文针对这个问题进行归纳总结,希望对大家有所帮助。
2025-03-03 16:11:39
356
原创 c++之移动构造函数或者移动赋值运算符的作用
前面的文章中有的涉及到了移动构造函数或者移动赋值运算符,对于它们的形式有了一定的了解,但是对他们的核心作用以及为什么要引入这两个东东,很多朋友还是一知半解。本文就是来解决这个问题的。要理解这个问题绕不开右值引用,c++11之前的 版本中只有拷贝构造函数,而拷贝构造函数是一般会,即会创建两个完全一样的对象,包括指针指向的区域都会进行重新申请内存和拷贝。这种情况下如果对象是一个大数组或占用资源多的对象,就会产生很大的内存拷贝开销。那么如何解决这个问题呢?c+11版本引入了右值引用、移动语义来解决这个问题。
2025-03-03 15:52:40
509
原创 c++之仿函数详解
有一些场景使用内置的仿函数无法满足要求,因为内置的仿函数一般只支持基本的数据类型,如int double等,对于一些用户自定义的类型,内置的仿函数无法实现需求。又或者用户对仿函数有更复杂的逻辑需求,内置的仿函数同样无法满足需求,所以需要用户自定义仿函数。// 使用greater仿函数进行降序排序// 使用自定义仿函数// 按奇偶性排序//自定义类型class Aprivate:int value1;int value2;
2025-03-01 12:13:32
404
原创 c++字符编码/乱码问题
之前我存在错误的认知:认为Unicode=UTF-16,实际上这是错误的理解,Unicode是一种字符集,它并不是编码方式,Unicode可以以不同的方式编码,还有一些错误的理解,比如我经常用使用qt框架进行开发,qt框架中的QString采用的就是UTF-16编码,在有些文章中没有描述清楚,仅仅是说QString采用的是Unicode字符串进行编码的,造成了我认为Unicode=UTF-16的印象。肯定是按照UTF-8格式进行存储,所有的字符都进行存储,包括双引号、分号、等号,换行符等。
2025-02-27 17:43:57
990
原创 理解CPU与GPU频繁数据传输
在学习深度学习神经网络过程中,有时候会遇到一些描述“尽量避免CPU与GPU频繁数据传输”。那这句话应该如何理解呢?我们知道CPU可以访问内存,而GPU也有自己的显存。要完成功能一般都是CPU从硬盘或者其他数据源读取数据到内存中,然后将内存中的传输到GPU的显存中,GPU从显存中获取数据并进行计算,并最终将计算的结果返回给CPU的内存中。
2025-02-26 17:40:33
581
原创 c++之原始字符串字面量(raw string-literals)
在c++11版本引入了一个特性(raw string literals)字符串字面量,这个特性的引入解决了在c++字符串中如果包含类似换行符、指标、单个反斜杠、转义字符等可以以人们更能理解的方式去使用,而传统的携带这些字符串的字符串需要将这些字符显式的写到字符串中。官方的解释可能更清楚:来自转义序列的字符(制表符、换行符、单个反斜杠等)可以以原始形式输入,同时保持格式化。这在编写包含大量引号或特殊格式的文本时特别有用。这可以使你的字符串字面量更容易阅读和维护。
2025-02-26 17:19:07
407
原创 选择排序算法
选择排序算法的核心思想:选择排序的重点是从剩余部分进行遍历查找。时间复杂度分析采用大O表示法,通过上面的例子来分析这个算法的时间复杂度,假设有n个数据:
2025-02-25 17:15:07
563
原创 c++重载函数调用与重载转换运算符
首先应该理解什么叫重载转换运算符,前面的是将一个对象转换成函数调用的形式,这里是将一个对象直接转换成一个类型,这个类型可以是一个基本数据类型,也可以是复杂数据类型。更简单的理解是将一个类对象转换为一个类型。进入到c++11版本后,重载类型转换引入了新的语法特性“explicit convertion function”。这个特性通过关键字explicit来体现。在这个特性之前可以进行隐式转换,但是通过explicit关键字修饰后,则不能进行隐式转换。从上面的例子看到,函数调用重载的形式;
2025-02-24 15:45:52
502
原创 c++之类的初始化
本文对类的初始化方法进行梳理总结,类的初始化方法有多种形式,针对不同的变量也不一样。下面进入正题。注意上面的例子,(1)。(2)。(3)这种初始化方法仅在未定义构造函数的情况才会生效,如果存在构造函数,则会优先调用对应的构造函数,请看下一小节。。
2025-02-24 14:12:30
272
原创 c++之enum class详解
enum Color1 {BULE,RED} //编译错误,与Color 的定义重复这里的Color1中的RED与Color名称相同,会编译报错,产生如下错误:传统枚举可以隐式转换为整型传统枚举类型的数据可以与整型直接进行比较int n = c;//可以隐式转换,枚举可以转换为整型if(c == 0) {....} //可以直接与整数比较。
2025-02-21 14:57:58
365
原创 c++之nullptr与NULL
说白了就是,如果使用NULL,那么在某些情况下可能会编译报错,因为编译器编译时遇到了歧义,不知道使用哪个匹配的函数。nullptr是c++11Y引入的关键字,它是std::nullptr_t类型的右值常量。为什么这个不会报错呢?上面的调用会发生什么呢?
2025-02-18 19:35:55
405
原创 decltype详解
如果输入是变量,则返回比变量的类型如果输入是函数调用,则返回函数的返回值类型如果输入是一个赋值表达式,则返回的是左值引用类型。
2025-02-17 16:02:32
388
原创 c++之断言assert
断言(assert)功能是从C语言基础而来的一个功能,在早期的c++98版本就已经存在,直到c++11版本引入了静态断言(staic_assert)功能。断言是一种在程序中检查条件的机制,。注意:静态断言的核心是在编译阶段生效,常用来判断常量表达式,比如在编译阶段判断平台的架构是否64位或判断大小端是否与预期一致等。运行时断言的含义是在程序运行阶段进行判断,而非编译阶段进行判断。。
2025-02-17 14:17:03
231
原创 动态规划算法
通过上面的表格可以看到有两种区域,分别使用红色和绿色进行表示,红色表示新增的区域,而且该域内的值都是0;绿色区域表示实际的需要进行动态规划的区域。从上面的表格左上角开始,行、列所以你都是从0开始。动态规划算法的核心思想是将复杂的问题拆解成子类问题,采用二维数组的方法模拟网格单元进行处理。下面将我实现的一些动态规划算法写到下面,供大家参考理解。
2025-02-14 14:55:06
513
原创 c++14之std::make_unique
虽然在c++11版本std::unique_ptr<T>已经引入,但是在c++14版本引入之前,std::unique_ptr<T>的创建还是通过new操作符来完成的。在c++14版本已经引入了类似make_shared的std::make_unique,目的是提供更加安全的方法创建std::unique_ptr<T>,防止产生资源泄露等问题。
2025-02-14 12:48:20
600
原创 c++14之字面量特性
在c++14版本引入了字面量特性,这个"字面量"应该如何理解呢?通俗的理解就是使用一些约定成俗的字母或者符号表示一个数字的意义。比较正式的解释是:用户定义字面量允许我们使用后缀的方式直接创建特定类型的对象,这些字面量定义在命名空间中。
2025-02-13 15:09:12
242
原创 std::begin/std::end与迭代器详解
std::begin和std::end是c++11引入的全局函数,它们提供了一种统一的方式来访问容器或者数组的起始和结束迭代器。// 函数原型(简化版)// 数组特化版本。
2025-02-12 15:00:46
435
原创 排序算法之自定义排序函数的含义
上面的的类型中包含了2个变量,这种情况下应该如何进行排序呢?sort方法肯定没有办法实现这种用户自定义的类型不用成员的排序,那应该怎么办呢?上面的例子会使用默认的比较函数,用户只需要指定升序还是降序就可以了。我们经常碰到stl容器或者一些排序算法需要用户自定义实现排序规则,为什么要用户自定义排序规则函数呢?
2025-02-12 14:07:54
235
SSymlinkerbash脚本和sysroot-relativelinks.py脚本下载
2023-07-27
基于qt c++的通信解耦问题
2023-02-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人