自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

南城小馆

分享工作、学习中的经验心得。

  • 博客(18)
  • 收藏
  • 关注

原创 使用RAII技术简化代码耗时统计

使用RAII技术进行耗时统计,就像std::lock_guard那样, 只要模板参数类型包含begin()和end()函数。在RAII的模板类的构造函数中调用begin()函数,在析构函数中调用end()函数。通过在end()函数中实现不同的功能,就可以轻松实现需要统计单次耗时、多次总耗时、多次中的最小耗时、多次中的最大耗时,甚至是多次的平均耗时等功能。

2024-01-19 17:20:17 981

原创 C++ 中的 std::vector:动态数组操作和常用函数解析

C++ 中的 std::vector 是一个非常实用的容器,它提供了动态大小的数组功能,可以存储任意类型的元素,并且可以方便地进行元素的添加、删除和查询操作。本博客不仅介绍了一些常用的成员函数和操作符,如 push_back()、pop_back()、size()、empty() 和 clear(),还详细对比了 push_back() 和 emplace_back() 之间的区别。此外,博客还提供了一些小示例程序,以帮助读者更好地理解这些概念。

2023-11-15 18:07:18 5497

原创 c++标准库之数组

`std::array` 是 C++ 标准库提供的一个容器,它能够以固定大小的方式存储多个相同类型的元素。它的大小在编译时就确定,无法动态改变。`std::array` 提供了类似于原生数组的访问方式,并提供了一些额外的成员函数来方便元素的访问、修改和操作。与原生数组相比,`std::array` 具有更好的类型安全性和更多的便利性,而且可以使用标准库提供的算法和函数进行操作。使用 `std::array` 可以避免手动管理内存的麻烦,同时还能享受到标准库提供的丰富功能和性能优化。

2023-09-11 21:30:32 313

原创 c++中位域简介

位域列表中各个元素的描述:tpye: 类型只能是int(整型),unsigned int(无符号整型),signed int(有符号整型) [name]: 位域的名字,遵循变量的命名规则,[]方括号是可选的,如果没有名字,那么代表空域,该位域是不可用的,类似于占位width: 位域占这种类型的多少个位,width 的大小应该小于等于type类型所占内存大小,比如int 32位, width 必须小于等于32

2023-09-11 14:32:44 254

原创 c++ 标准库chrono 中duration、timepoint和clock的使用方法

这篇文章将为您介绍如何使用C++标准库中的chrono库,其中包括std::chrono::duration、std::chrono::time_point和std::chrono::clock等重要的组件。此外,我们还将介绍一些与时间计量相关的辅助函数,如std::time()、std::localtime()和std::ctime()等。最后,我们将通过一个综合应用的示例,展示如何使用chrono库中的时钟、时间点和时间段来实现稳定的FPS渲染图片。

2023-04-26 23:25:14 1718

原创 c++{fmt} API 详解

本文旨在介绍 fmt 库的常用 API,包括格式化自定义结构体、枚举、标准库和时间等。通过本文,您将了解到如何使用这些 API 来更好地格式化和输出数据。在本文中,我们将逐一介绍这些 API 的用法,并提供具体的示例代码和执行结果,帮助读者更好地理解和掌握这些技能。

2023-04-13 23:43:34 2050

原创 c++ {fmt}库使用指南一

当我们需要将数据以某种格式输出时,使用"fmt"库能够使我们的工作更加高效。该库提供了丰富的格式化语法,如占位符、对齐、精度等,可以根据不同的需求进行灵活应用。此外,"fmt"库还支持多种数据类型的格式化输出,如整数、浮点数、字符串等,可以满足不同场景下的需求。在本文中,我们将深入讲解"fmt"库的使用方法,包括格式化字符串的语法规则、常用的格式化选项以及示例代码等,帮助读者更好地掌握该库的使用技巧。

2023-04-09 00:47:56 14395 2

原创 linux中使用问题——不定时更新

人到中年,啥都需要会一点,还是很怀念刚刚毕业那会,只要会个windows就可以了,写代码还是可以debug的。打打断点,问题就解决啦。现在这种安逸时光一去不复返了。时不时得在linux上搞搞,时不时又得到android上看看。精力憔悴啊,所以遇到问题呢就百度,同时也记录下,以免将来忘记了又找一遍。

2022-09-25 22:50:25 165

原创 简单排序之选择排序、冒泡排序、插入排序

九大排序中最简单的三个排序我把他们放在一起说说,对比对比区别。理解起来就容易那么一丝丝。

2022-09-25 22:29:59 249

原创 神奇的交换术

在排序时候交换两个值的操作是必要的,怎么交换两个值呢?除了老老实实定义第三个变量,还是用一些奇思妙想呢?

2022-09-24 22:02:28 253

原创 函数指针详解

普通函数指针的定义方式为:return_type (*name)(arg1, arg2,...., agrn)函数指针赋值和调用时,函数名即为函数指针的地址。使用typedef可以简化函数指针的定义,例如:typedef int (*Fun)(int a, int b);使用typedef之后,可以直接使用别名定义函数指针变量。函数指针可以存储在数组中,实现对不同函数的调用。类成员函数指针的定义方式为:return_type (className::*pf)(arg list)类成员函数指针的调用

2022-09-17 18:17:07 1002

原创 c++枚举字符串转换工具

在太多的工程中,我们可能都需要将一些枚举、整形标记打到日志中去,如果只打印数组,那也不行啊,出问题翻看日志,还得一个个查询,这时候我们该怎么办呢,写一堆ifelse,写一堆switch,挨个匹配字符,那只能说,小学生代码,能不能搞一个通用的转换呢?这里有个参数很有意思,fallback,他是什么意思呢,是退路,应变计划,说白了就是plantB的意思。stdlower_bound该函数是stdalgorithm里面的,含义大概就是将排好序的序列使用二分查找,返回第一个不小于目标元素的迭代器。.........

2022-07-20 00:16:19 1237

原创 主线程任务队列

平时用惯了qt,也知道qt只能在主线程中更新ui界面,ui中的各种按钮,输入也是在主线程中运行的。但如今生不逢时,所写项目竟要在嵌入式中运行,嵌入式内存本来就小,也没有界面,不可能给我搞个qt demo吧,只能使用命令行了,也没想太多,直接就撸起了代码,在子线程的回调函数中使用std::cin、cout 进行交互。由于是多线程环境,cout输出直接变了型,几乎是乱序输出,这是由于多线程抢占执行所致,也不难搞,直接写个WriteLog()函数,使用互斥锁保护起来,就如下面那样。机智如我,乱序输出也就这样搞好

2022-07-04 23:17:35 650

原创 一纸代码手记

c++不具名命名空间命名空间是用来防止对象重复定义的。不具名命名空间也是防止对象重复定义的,只是没有名字而已不能在头文件中书写不具名命名空间在cpp 中写不具名命名空间,本文件中是可以直接使用,别的文件无法使用。 namespace { int x; int y; int myfun(); }utf8、utf8 BOM、utf8带签名UTF-8 BOM与UTF-8带签名指的是同一回事,二者指的是UTF-8的同一格式UTF-8 BOM中的BOM,全称

2022-04-26 20:37:28 766 2

原创 浅谈c++中继承体系中易错点

浅谈c++中继承体系中易错点目前,就我工作经验来看,在c++中继承最爱写错或者写忘记的有两点:基类中需要覆盖的方法为设置为虚方法。基类中的析构函数未设置为虚方法。今天我们就基于这两点,展开讨论下,以免以后的工作中老爱犯错误。如果基类中需要覆盖的方法没有设置为虚方法会怎么样呢,后果就是继承了该类的子类,子类想要覆盖父类的方法,是不会成功的,在发生动态绑定的时候,依旧是调用父类的方法,并未调用子类的方法。我们直接以代码的方式来验证。...

2021-09-25 11:37:36 404

原创 c++位运算运用之掩码(BitMask)

c++位运算运用之位掩码(BitMask)场景:假如我想写一个动画小人,某个接口仅仅传int型就可以同时控制小人抬右手、抬左脚、闭眼睛,或者同时抬右手,抬左脚、睁眼睛。这儿其实就是一些动作的组合,可以把不同动作对应到int的每一个位上,int 占4个字节,每个字节8位,共32位,每一个位来表示一种动作,那么可以同时组合32个动作。内存分布就像这样:11111111 11111111 11111111 11111111这样一个int 的值就是INT_MAX实现:1.定义枚举表示各种动作:enum

2021-08-21 09:58:21 3452 1

原创 c++类型转换(static_cast、const_cast 、dynamic_cast、reinterpret_cast)使用方法

隐式类型转换:编译器自动进行的类型转换,例如将整数赋值给浮点数,或者将派生类指针赋值给基类指针。显式类型转换(强制类型转换):const_cast:用于去除csonst属性,可以将const对象转换为非const对象。dynamic_cast:用于在继承关系中进行安全的向下转型,即派生类对象指针转换为基类对象指针。static_cast:用于基本类型之间的转换,以及一些合理的指针和引用之间的转换。reinterpret_cast:用于不相关类型之间的转换,通常用于指针和整数之间进行转换。

2021-06-22 21:16:20 535 2

原创 深入理解c++11thread_local

理解c++11 thread_localthread_localthread_local的生命周期全局thread_local局部thread_local类内静态成员thread_local总结thread_localthread_local 是c++的关键字,可以用来修饰全局变量、类的静态成员变量以及函数的局部变量,表示每一个线程都拥有此变量的一个实例拷贝,相当于每个线程都拥有一个变量。例如:thread_local int global_var; // 全局的thread_local变量voi

2021-06-16 02:15:50 3733

使用RAII技术简化代码耗时统计源码

使用RAII技术简化代码耗时统计的源码,包含实现头文件和测试文件。

2024-01-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除