- 博客(34)
- 收藏
- 关注
原创 4.4 Boost库工具类assign 的使用
Boost.Assign库简化了C++容器的初始化和赋值操作。它通过重载+=、,和()运算符,提供简洁的语法来填充标准容器数据。库核心是list_inserter类,支持链式操作和重复数据输入功能。工厂函数如list_of()、map_list_of()支持初始化时填充数据,提供比C++11初始化列表更好的兼容性。该库还支持容器适配器(stack/queue)和部分Boost容器,通过to_adapter()转换。assign库通过操作符重载和泛型编程,显著简化了容器初始化代码,提升了开发效率。
2025-11-17 19:48:13
602
原创 4.3 Boost 库工具类 optional 的使用
本文介绍了C++中boost::optional库的使用方法。optional为"可能产生无效值"的情况提供了更好的解决方案,已被收入C++17标准。optional通过容器语义包装对象,实现未初始化概念,支持指针操作、比较运算和安全访问。文章详细讲解了optional的构造方法、访问接口、比较操作和工厂函数make_optional()的使用,并展示了其作为函数返回值的应用场景。optional相比传统哨兵值和pair<T,bool>方式更加通用和安全,特别适合需要轻量级无
2025-11-09 23:38:30
596
原创 4.2 Boost 库工具类 ignore_unused 的使用
ignore_unused 使用可变参数模板,支持任意数量、任意类型的变量,把它们作为函数的参数"使用"了一下,从而"骗"过编译器,达到与"(void)var"完全相同的效果。编写代码的过程中有时会出现一些暂时用不到但又必须保留的变量,GCC 等编译器会对此发出警告,使用"-Wunused"可以关闭这些警告消息,不过这也有可能导致潜在的隐患。显然,ignore_unused 比 C 风格的 "(void)var" 要更容易理解,无须多余的注释,代码自身说明了一切。
2025-11-09 17:27:47
240
原创 4.1 Boost库工具类noncopyable的使用
Boost库的noncopyable类提供了一种简单方式实现禁止拷贝的类。默认情况下,C++编译器会自动为类生成拷贝构造函数和拷贝赋值操作符,但有时需要禁止这种行为。传统做法是手动私有化这两个函数,但会带来重复代码。通过继承boost::noncopyable,可以简洁地实现禁止拷贝功能。noncopyable通过将拷贝操作设为私有或使用C++11的delete关键字来阻止拷贝行为,使代码更清晰安全,明确表达设计意图。
2025-11-06 21:36:04
317
原创 3.5 Boost库中pool库的使用
Boost.Pool是一个高效的内存池库,主要用于管理大量小对象的内存分配和释放。它通过预分配大块内存来提高性能,避免了频繁的系统调用。该库包含四种组件:基本的pool用于简单数据类型,object_pool支持类对象构造/析构,singleton_pool提供线程安全的单例内存池,以及pool_alloc可用作STL分配器。其中object_pool特别提供了construct()和destroy()方法来自动调用构造函数和析构函数。这些组件能显著提升需要频繁分配/释放小对象场景下的性能,同时简化内存管理
2025-11-05 21:37:32
734
原创 3.4 Boost库intrusive_ptr智能指针的使用
摘要:intrusive_ptr是一种引用计数型智能指针,适用于已有引用计数机制的对象。与shared_ptr不同,它需要用户实现intrusive_ptr_add_ref()和intrusive_ptr_release()函数来管理引用计数。通过继承intrusive_ref_counter辅助类可简化实现。虽然使用需要额外代码,但能复用现有数据结构且无额外开销,适合性能敏感场景。
2025-11-05 20:09:28
252
原创 3.5 Lua代码的包(模块)管理
摘要:本文介绍了Lua中三种包管理方法:1)同级目录下通过返回表结构实现多值返回;2)同级文件夹目录使用相对路径require;3)其他路径通过修改package.path添加绝对路径,并使用问号占位文件名。三种方法均通过测试代码验证,展示了不同位置包的调用方式和运行结果。重点说明了路径配置的语法要求和使用注意事项。
2025-11-04 11:34:08
309
原创 3.4 Lua代码中的文件操作
Lua文件操作接口摘要:文件io.open()支持多种模式(r/w/a等)打开文件并返回句柄。io.input()/io.output()可重定向文件读写,io.read()支持多种参数读取数据,io.write()写入数据。文件句柄支持seek()定位光标位置,lines()实现行遍历。示例演示了文件打开、读写、光标定位等操作流程,包括二进制模式处理、文件内容遍历输出等。注意读写位置由光标控制,重定向后才能正确输出到文件而非控制台。
2025-11-03 14:34:13
372
原创 3.3 Lua代码中的协程
协程是一种用户态的轻量级线程,由用户控制调度。与操作系统线程不同:协程由程序显式控制切换开销极小,可创建成千上万个协作式调度,不会出现竞态条件常用的协程APIcoroutine.close (co) --- 关闭协程,返回boolcoroutine.create (f) --- 创建协程,传入一个function,返回一个协程句柄coroutine.isyieldable ([co]) --- 判断协程是否是 yield 状态。
2025-10-30 10:50:44
248
原创 3.2 Lua代码中的面向对象
本文探讨了Lua中面向对象编程的实现方式。首先通过self关键字解决对象方法调用时内存引用问题,实现类似C++的this指针功能。然后分析了自索引(metatable.__index)的两种实现方式及其差异,并展示如何通过自索引实现继承机制。文章还详细介绍了类的实例化过程,包括通过__newindex创建子类特有属性,以及多重继承的实现方法。最后探讨了方法重写和成员私有化的实现技巧。这些技术共同构成了Lua中面向对象编程的核心机制,为开发者提供了灵活的代码组织方式。
2025-10-29 17:23:56
408
原创 3.1 Lua代码中的元表与元方法
元表是一个普通的表,可以附加到另一个表上,用来定义该表在某些特定操作下的行为。当 Lua 对表进行某些操作(如相加、索引、调用等)时,如果该表有元表,Lua 就会查看元表中是否有对应的元方法来决定如何执行操作。可以起到一个类似于c++中运算符重载的作用meT3={};
2025-10-29 11:35:04
326
原创 3.0 Lua代码中的闭包
摘要:闭包是能够访问并记住其创建时作用域变量的函数,依赖词法作用域实现。当内部函数引用外部函数的局部变量时形成闭包,如计数器案例所示。闭包可配置不同功能(如乘法器)或实现迭代器(如mypairs),每个闭包都维护独立的变量环境。典型应用包括状态保持和函数工厂模式,通过闭包可以实现数据封装和定制化功能。
2025-10-28 17:33:58
263
原创 2.7 Lua代码中的可变参数
扩展:函数多个返回值的输出打印时,如果前面的函数加了小括号只会打印第一个值,不加小括号会打印所有的值;在print中调用两个有多个返回值的函数时,第一个函数会打印第一个值,后面的函数如果没有加小括号则会打印所有的值。在遇到返回值是可变参数时,可用 table.unpack(list, i, j) 获取第 i 位置到第 j 位置的返回值,list是数组,i 是起始位置返回值,j 是终止位置的返回值。select(n,...) 表示获取可变参数从第 n 个参数开始的部分数据。用“#”来获取表的长度。
2025-10-28 15:58:57
239
原创 2.5 Lua代码中string类型常用API
string.gsub(s, pattern, repl, n) 将字符串 s 中的 pattern 配上的字符串替换为 repl 字符串,n 为最大替换次数,返回替换完的字符串以及替换次数。string.find(s, pattern, init, plain) 在字符串 s 中查找子串 pattern ,如果找到则返回pattern的起始和结束位置,没有找到返回nil。string.sub(s, i, j) 将字符串 s 的第 i 个字符到第 j 个字符的闭区间的字符串截取出来成为一个新的子串。
2025-10-28 10:37:51
233
原创 2.4 Lua代码中table常用API
摘要:Lua表操作函数包括:1)concat连接数组元素为字符串,可指定连接符和范围;2)remove删除指定位置元素,默认删除最后一项;3)insert在指定位置插入元素,默认插入末尾;4)sort排序数组元素,支持自定义规则;5)move拷贝数组元素到目标数组指定位置。这些函数要求数组元素类型一致,不能有嵌套结构,且操作位置不能越界。示例展示了各函数的基本用法和输出结果。
2025-10-27 21:52:43
161
原创 2.3 Lua代码的流程控制
本文介绍了Lua语言中的条件判断、循环控制和goto语句的使用。主要内容包括:1) 嵌套if-else条件判断结构;2) while、repeat和for循环实现,其中for循环分为数值循环和泛型循环;3) goto语句的作用域限制;4) ipairs和pairs迭代器的区别。特别指出Lua不支持++i等运算符,也没有continue关键字,但可以使用break和goto控制流程。通过多个示例代码展示了这些语法结构的具体应用,包括数值求和、集合遍历等常见场景。
2025-10-27 17:00:29
215
原创 3.3 Boost库weak_ptr智能指针的使用
摘要:weak_ptr是配合shared_ptr使用的智能指针助手,主要用于观察资源使用情况。它不增加引用计数,通过lock()方法可获取shared_ptr来操作资源。主要用途包括:1)对象自我管理,通过enable_shared_from_this获取this指针的shared_ptr;2)解决shared_ptr的循环引用问题,将强引用改为弱引用。weak_ptr提供了expired()检查资源有效性,use_count()查看引用计数等功能,是智能指针体系中的重要补充。
2025-10-23 22:55:03
738
原创 2.2 Lua的基本运算符
Lua运算符使用总结:赋值运算符支持多重赋值和值交换;算术运算符包括加减乘除、取模和指数运算;关系运算符比较值需类型相同,结果为布尔值;逻辑运算符and/or/not可实现三目运算。特别地,and/or遵循短路求值规则,and遇假返回左值,or遇真返回左值。通过运算符组合可模拟三目运算,如(a and b) or c。表中元素比较的是引用而非内容。
2025-10-21 14:24:18
137
原创 2.1 Lua的基本数据类型
Lua是一种轻量级嵌入式脚本语言,具有跨平台、开源、运行速度快的特点。它支持动态类型,变量无需声明类型且可随时改变。Lua包含8种基本数据类型:nil、boolean、number、string、function、userdata、thread和table。其中table是一种重要的数据结构,支持键值对和数组形式,可嵌套使用。函数在Lua中是一等公民,可作为参数传递和变量赋值。Lua的变量分为全局变量和局部变量(用local修饰),作用域通过代码块控制。在逻辑判断中,只有false和nil被视为假值,其他值
2025-10-19 16:43:44
223
原创 1.0 lua代码搭建Windows开发环境
Lua环境配置与开发指南:首先从Lua官网下载Windows版解释器并配置系统环境变量,通过CMD输入lua54测试是否安装成功。为提高开发效率,推荐在VSCode中安装Code Runner插件,配置lua54运行环境后即可编写.lua文件。测试代码展示了基本语法(变量、循环、注释)和运行方式,右键选择"Run Code"即可执行。成功运行后输出结果显示环境配置正确,包括字符串输出、变量打印和循环效果。
2025-10-13 14:10:31
318
原创 3.2 Boost库shared_ptr类处理开辟的内存空间
shared_ptr是Boost库中的智能指针,采用引用计数机制管理动态分配的内存对象。它支持拷贝、赋值和共享,当引用计数归零时自动释放资源。shared_ptr提供了丰富的构造函数、解引用操作符、重置函数及引用计数查询功能,可安全用于标准容器。通过定制删除器,它能管理非内存资源如文件句柄和socket。文章还介绍了shared_ptr在工厂模式、桥接模式中的应用,以及与标准库的兼容性,包括指针转型函数、别名构造函数等高级特性,使其成为C++中强大的资源管理工具。
2025-10-08 16:11:03
725
原创 3.1 Boost库scoped_ptr类管理手动开辟的内存空间
摘要:本文介绍了C++中的RAII机制和智能指针技术。RAII通过在构造函数中获取资源、析构函数中释放资源来管理内存,但堆上对象需要手动delete存在泄漏风险。智能指针(如scoped_ptr)通过代理裸指针实现自动资源管理,其特点包括:1)禁止拷贝保证所有权唯一;2)重载操作符模拟指针行为;3)离开作用域自动释放资源。scoped_ptr相比auto_ptr更安全,但功能受限,适用于明确不需要转移所有权的场景。智能指针有效解决了资源泄漏问题,同时保持了与原始指针相近的性能。
2025-10-07 11:07:27
640
原创 2.9 Boost库date_time的其他相关设置
本文介绍了Boost库中date_time模块的配置和使用方法。主要包括:1)宏配置选项,如DATE_TIME_NO_DEFAULT_CONSTRUCTOR用于强制有效值构造,BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES用于日期区间类型控制;2)C++11自定义字面值简化日期时间操作;3)使用date_facet和time_facet进行日期时间格式化;4)本地时间处理时区和夏令时问题,通过tz_database类管理时区信息,并演示了北京到旧金山的时区转换示例。这些功能
2025-10-06 17:05:20
571
原创 2.8 Boost库ptime类表示时间点
Boost库中的ptime类用于处理精确时间点,结合日期和时间长度。它支持多种构造方式(日期+时间、字符串解析、时钟获取),提供日期和时间分量获取、比较运算、时间区间计算等功能。ptime可转换为字符串、tm结构和time_t,支持特殊时间值处理,并可通过时间迭代器进行遍历操作。该类轻量高效,适用于需要精确时间处理的场景,如日志记录、时间计算等。
2025-10-04 22:37:11
612
原创 2.7 Boost库time_duration类表示时间长度
Boost库中的date_time模块提供了精确的时间处理功能,支持微秒级精度(可扩展至纳秒级)。核心类time_duration用于表示时间长度,支持时、分、秒及更小时间单位的计算和转换。通过子类hours/minutes/seconds等可直观创建时间量,并支持比较运算和四则运算。时间值可正可负,支持特殊值(如无限值)处理。通过宏定义可切换微秒/纳秒精度,配套函数提供时间格式转换和精度检测功能。该库特别适合需要高精度时间计算的场景,其设计兼顾了灵活性和易用性,使开发者能方便地处理各种时间操作需求。
2025-10-04 16:58:22
717
原创 2.6 Boost库日期处理函数附件
本文介绍了boost::date_time库中的日期迭代器和gregorian_calendar类的使用。日期迭代器(day_iterator/week_iterator/month_iterator/year_iterator)允许以不同时间单位递增/递减日期,支持解引用和比较操作符,但不完全符合标准迭代器规范。gregorian_calendar类提供静态函数如is_leap_year()判断闰年、end_of_month_day()获取月末日期。代码示例展示了日期迭代器的基本用法和gregorian_
2025-09-25 08:30:00
186
原创 2.5 Boost库date_period 类处理日期区间
本文介绍了Boost库中date_period类的使用,用于表示日期区间。date_period表示左闭右开的时间区间,支持构造、比较、平移、扩展等操作,能判断日期包含、区间交集、相邻关系等。文章通过代码示例演示了如何创建日期区间、获取端点、计算长度,以及进行区间比较、合并等操作。date_period还提供了merge()和span()方法来合并区间,适用于处理日程安排等需要日期区间计算的场景。
2025-09-14 23:33:32
416
原创 2.4 Boost库data_duration处理日期长度及其相关类
摘要:本文介绍了boost::date_time库中的日期长度类date_duration及其派生类days、weeks、months和years的使用方法。date_duration表示以天为单位的时间长度,支持比较、加减和除法运算。days是date_duration的常用typedef,weeks是其子类表示周数。months和years类支持月份和年份的运算,但会丢失具体天数信息。文章通过代码示例演示了日期与时长运算的特性,包括特殊日期处理、月末日期运算规则等,并指出可以通过宏控制是否包含这些时长类
2025-09-13 22:45:33
330
原创 2.3 Boost库date_time类处理日期
Boost库中的date_time模块提供了强大的日期时间处理功能。该库分为日期处理(gregorian)和时间处理(posix_time)两部分,分别需要包含不同头文件。日期处理支持格里高利历,范围从1400-01-01到9999-12-31,能处理无限时间、无效时间等特殊概念。date类作为核心日期类,提供丰富的日期操作接口,包括日期构造、比较、成分获取、字符串转换等功能。同时支持特殊日期值(如无限日期)和异常处理机制,确保日期操作的准确性。该库还支持与C语言tm结构相互转换,为日期处理提供了全面而灵活
2025-09-11 10:11:30
823
原创 2.2 Boost库progress_timer类的使用
Boost库中的progress_timer是一个自动计时工具,继承自timer类,在对象析构时自动输出执行时间。它默认使用cout输出,也可通过构造函数指定其他输出流(如stringstream)。使用时只需在作用域内创建progress_timer对象,即可在退出作用域时自动记录耗时。注意:时间输出发生在对象析构时,若在析构前访问输出流将无法获取时间数据。该工具简化了代码性能分析,避免了手动调用计时函数的繁琐操作。
2025-09-10 15:30:00
180
原创 2.1 Boost库timer类的使用
摘要:Boost库中的timer类是一个高精度计时器,提供毫秒级计时功能。通过std::clock()函数获取时间点,计算时间差并转换为秒数。主要功能包括:elapsed()获取已过时间,restart()重置计时,elapsed_min()/max()返回精度范围。示例代码演示了计时器的使用方式,包括休眠后测量时间并输出结果。该计时器适用于需要精确时间测量的程序场景。
2025-09-10 09:16:40
201
原创 逻辑代数 分配律A+B·C=(A+B)·(A+C)证明
该证明方法是错误的,在证明的第三行“A·(1+B+C)+B·C”是推不出来,其中“A+AC+AB”到“A·(1+B+C)”用到了算术代数中的思考方法。在算术代数中任何一个数乘以1都等于该数本身,被该想法带偏了,而在逻辑代数中A是不等于A与上1的,因为A与上1等于1了。会有疑惑“A ·(A+B+C)=A”,试想一下,三个变量的或上在与上其中的一个变量,其结果不就是该变量嘛。
2025-06-05 11:15:03
313
2
原创 C++设置文件为只读属性
这段C++代码演示了如何创建和写入CSV文件。程序首先在当前目录打开/创建test.csv文件,然后循环写入100行数据(每行包含一个数字和该数字加100的值)。写入完成后,通过Windows API将文件属性设置为只读,最后关闭文件。代码包含了文件操作的基本流程:打开文件、写入数据、设置属性、关闭文件,并包含必要的错误处理(检查文件是否成功打开)。
2025-05-27 15:31:29
191
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅