
笔记
文章平均质量分 82
丁金金_chihiro_修行
be better boy man
展开
-
symbol字体导出图像
该代码展示了如何使用 FreeType 库和 JPEG 库将 MS Symbol 字体中的字符渲染为 JPEG 图像。首先,定义了一个 MS Symbol 编码表,用于将 Unicode 字符映射到 Symbol 字符码。接着,通过 PDF_FindCode 函数查找 Unicode 对应的 Symbol 字符码。RenderGlyphToJPEGBuffer 函数负责将指定的字符渲染为 JPEG 图像,并将其存储在缓冲区中。主函数中,初始化 FreeType 库并加载 Symbol 字体,选择 MS_SY原创 2025-05-20 21:39:49 · 120 阅读 · 0 评论 -
字体样式集合
本文整理了字体样式的分类与名称,主要包括基础样式、字形变体、组合样式以及按字母排序的完整列表。基础样式如Regular、Bold、Light等,字形变体包括Italic、Condensed、Outline等。组合样式进一步细分为斜体类、宽窄类、特效类和复合样式,如Bold Italic、Condensed Bold、3D Outline等。最后,完整列表按字母顺序排列,涵盖了所有可能的字体样式组合,如3D Italic、Black Condensed、Bold Expanded等。该分类为字体选择提供了清晰原创 2025-05-17 20:33:40 · 433 阅读 · 0 评论 -
C++时间库chrono_Time_point (三)
所有这些timer都不会保证绝对精准。即经常用来得到当前时间点到1970年1月1日00:00的时间距离、该函数返回的duration的精度和构造time_point的时钟(Clock)有关(见4时钟详解)。std::chrono::time_point 表示一个具体时间,如上个世纪80年代、今天下午3点、火车出发时间等,只要它能用计算机时钟表示。时间点有个重要的函数:duration time_since_epoch() (用于获取当前时间点距离时间戳的时间长度)要求其_Clock模板参数必须满足。原创 2023-01-17 20:59:24 · 3501 阅读 · 0 评论 -
C++时间库chrono_CLOCK(二)
*strady_clock:**它保证绝不会被调用,因此当实际时间流逝,其timepoint值绝不会减少,而且这些timepoint相对于真实时间都有稳定的前进速率。(2)由于各种time_point表示方式不同,chrono也提供了相应的转换函数 time_point_cast。,稳定的、单调的时钟,不受系统时间调节的影响,因而适合于测量时间间隔,通常测量程序运行时间就用。,系统范围的挂钟,可以理解为桌面右下角的时钟,这个时钟是可以调节的,因此。等类型,为了得到以我们想要的单位表示的时间段,可以用。原创 2023-01-17 20:58:28 · 1223 阅读 · 0 评论 -
C++时间库chrono_duration(一)
chrono是一个基于模板的,面向对象的,设计优雅且功能强大的。chronoduration:一个duration就代表了一个时间段,比如2分钟,4小时等等。clockclock的作用就相当于我们日常使用的手表:显示时间。chrono内部定义了三种clock和。time pointtime point表示某个特定的时间点。template原创 2023-01-17 16:13:21 · 3266 阅读 · 0 评论 -
chrono_duration(一)
chrono简介chrono是一个基于模板的,面向对象的,设计优雅且功能强大的time library。chrono内部定义了三种和时间相关的类型:duration:一个duration就代表了一个时间段,比如2分钟,4小时等等。clock: clock的作用就相当于我们日常使用的手表:显示时间。chrono内部定义了三种clock:system clock、steady clock和high-resolution-clock。time point:time point表示某个特定的时间点。原创 2023-01-16 22:36:08 · 1300 阅读 · 0 评论 -
MSVC C++ STL 源码解析系列
是 c++ 11 添加的智能指针之一,是裸指针的封装,我们可以直接使用裸指针来构造int a;int b;int b;1 });1 , 2 });intint a;int b;int b;1 });1 , 2 });int a;int b;int b;1 });1 , 2 });int a;int b;int b;原创 2023-01-10 00:30:14 · 1324 阅读 · 0 评论 -
智能指针(四) unique_ptr
从上面的源码中,可以看出,release()并不释放内存,仅仅只是将std::unique_ptr中的数据指针置空并抛出数据指针;虽然unique ptr智能指针不能拷贝,但是,当这个unique_ptr将要被销毁,是可以拷贝的。release()并不释放内存,仅仅只是将std::unique_ptr中的数据指针置空并抛出数据指针;也可以用来初始化另外一个智能指针(shared_ptr的get则不可以),unique_ptr的初始化(和shared_ptr的初始化相同)unique_ptr不支持的操作。原创 2023-01-10 00:25:44 · 522 阅读 · 0 评论 -
智能指针(三) weak_ptr
它没有重载 * 和 -> 运算符,而且weak_ptr 指向的对象可能会释放(不受weak_ptr控制,我们不能操作一个已经释放的对象),因此不可以直接通过 weak_ptr 访问对象(), 典型的用法是通过 lock() 成员函数来获得 shared_ptr,进而使用对象。Iock()功能就是查看weak _ptr所指向的对象是否存在,如果存在,那么这个1ock他就返回一个指向该对象的shared_ptr,(这也会导致原来的shared_ptr指向对象的引用计数加一);原创 2023-01-09 23:56:47 · 618 阅读 · 0 评论 -
智能指针(二) shared_ptr 注意点
然后调用函数set_ptr后又增加了m_ptr_a 指向 new CA() 和 m_ptr_b指向 new CB 两条引用,当test_refer_to_each_other这个函数返回时,对象ptr_a和ptr_b被销毁,通过结果可以看到,最后CA和CB的对象并没有被析构,其中的引用效果如下图所示,起初定义完ptr_a和ptr_b时,只有 ptr_a 指向new_CA() 和ptr_b 指向 new CB()两条引用,注意 :get() 返回的裸指针不能delete,否则会异常。原创 2023-01-09 23:06:11 · 773 阅读 · 0 评论 -
()智能指针一) shared_ptr
默认删除器处理不了(用shared ptri管理动态数组),需要我们提供自己指定的删刚除器:});可用default_delete来做删除器,default_.delete是标准库里的模板类。int//用来释放malloc出来的函数对象 template < class T > class FreeFunc {public :free(ptr);} };//用来释放new[]出来的函数对象 template < class T > class DeleteArrayFunc {原创 2023-01-09 22:27:05 · 1117 阅读 · 0 评论 -
shared_ptr 和 unique_ptr 深入探秘(CPP)
unique_ptr只保存了类型指针 ptr 和这个指针的析构方法,调用 delete ptr,就需要ptr的完整类型,为了防止这个问题出现,直接通过 assert sizeof 排除掉了这种风险。unique_ptr相当于在编译时绑定了删除器。shared_ptr保存的是一个控制块的指针。控制块包含的就是一个引用计数和一个原来对象的裸指针。控制块中初始化的指针是nullptr,在运行时为其赋值,也可以通过reset修改。类似于虚函数,shared_ptr相当于在运行时绑定了删除器。原创 2023-01-09 16:51:39 · 837 阅读 · 0 评论 -
仿函数C++
仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载 operator() 运算符。因为调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。//用来释放malloc出来的函数对象public:free(ptr);//用来释放new[]出来的函数对象public://用来释放new 出来的函数对象public:delete ptr;原创 2023-01-06 11:11:07 · 1004 阅读 · 4 评论 -
CPP构造函数总章
载,而⾮静态成员是随着对象的⽣成而⽣成。所以静态成员或⽅法的加载时机要早于⾮静态成员⽅法或。载,而⾮静态成员是随着对象的⽣成而⽣成。所以静态成员或⽅法的加载时机要早于⾮静态成员⽅法或。静态⽅法只能访问静态的成员变量和静态的成员⽅法。静态⽅法只能访问静态的成员变量和静态的成员⽅法。输出结果也会多出 调用有参数构造。而静态内部类可以看作是⼀个静态成员,所以道理同上。⽤静态成员,不能调⽤⾮静态成员。原创 2022-11-27 23:38:05 · 877 阅读 · 0 评论 -
类型转换构造函数
我们通过 类型转换构造函数 和 类型转换运算符 来做到 类型转换。构造函数:移动构造函数,拷贝构造函数,默认构造函数、普通构造函数特点:1、以类名作为函数名2、没有返回值;原创 2022-11-27 23:28:23 · 1192 阅读 · 0 评论 -
C++ 类:类相关的非成员函数、构造函数; =delete ; =defalute;
Sales_data.hSales_data.cppMain.cppCmakeLists从上代码可知,add, print, read 不属于类本身,从概念上讲 属于类接口的组成部分。同样,通常把非成员函数的声明和定义分开。函数从概念是属于类,虽然不定义在类型中,也同样与类声明在同一个头文件中一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类放在同一个头文件中=delete禁止某类函数的调用假如上面的几个函数中,不想使用其中某个,可以将其定义为private,或者使用=delete原创 2022-11-27 23:26:42 · 382 阅读 · 0 评论 -
c风格字符串,数组,string ,vector
vector(string>mystr:/伧创建一个string类型的空的vectorj对象(容器),目前这个mystr里不包含任何元素;原创 2022-11-20 11:56:07 · 952 阅读 · 0 评论 -
迭代器C11
在操作迭代器的过程中(使用了迭代器这种循环体),千万不要改变vectori容器的容量,也就是不要增加或者删除vectori容器中的元素/往容器中增加或者从容器中删除元素,这些操作可能会使指向容器元素的指针、引用、迭代器失效。失效就表示不能再代表任何容器中的元素。一旦使用失效的东西,就等于犯了严重的程序错误,很多情况下,程序会直接崩溃。原迭代器指的是进行操作之前保存的迭代器,包括begin()、end()以及其他位置的迭代器。原创 2022-11-19 23:39:15 · 492 阅读 · 0 评论 -
类型转换C11
因为类中存在虚函数,说明它可能有子类,这样才有类型转换的情况发生,由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表。cast-name有static_cast,dynamic_cast,const_cast和reinterpret_cast四种,表示转换的方式。在转换可能发生的前提下,dynamic_cast会尝试转换,若指针转换失败,则返回空指针,若引用转换失败,则抛出异常。非常激进的指针类型转换,在编译期完成,可以转换任何类型的指针,所以极不安全。原创 2022-11-19 23:38:56 · 527 阅读 · 0 评论 -
类型别名c11
使用typedef使用 usingwages base 是 double 类型 bbase 是 double *原创 2022-11-19 23:38:01 · 120 阅读 · 0 评论 -
函数总章C11
前面放auto,表示还数返回类型放到参数列表之后,而放在参数列表之后的返回类型是通过->开始的。原创 2022-11-19 23:37:14 · 507 阅读 · 0 评论 -
const 和 constexpr
3) 函数在使用之前,必须有对应的定义语句。我们知道,函数的使用分为“声明”和“定义”两部分,普通的函数调用只需要提前写好该函数的声明部分即可(函数的定义部分可以放在调用位置之后甚至其它文件中),但常量表达式函数在使用前,必须要有该函数的定义。//普通函数的声明//常量表达式函数的声明//常量表达式函数的定义}int main(){ //调用常量表达式函数//调用普通函数return 0;}//普通函数的定义}36。原创 2022-11-19 23:35:44 · 609 阅读 · 0 评论 -
软件工程复习
在计算机软件开发和维护过程中所遇到的一系列严重问题。软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理技术、和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。把软件的开发分成软件定义、软件开发、运行维护三个时期。一个软件从立项起,到废弃不用,统称为软件生命周期。各时期文档。原创 2022-11-19 23:33:55 · 1092 阅读 · 0 评论 -
Linux 系统函数
可以使用 man 2 函数名 查看 系统函数也可以在 文件内 使用 2+ shift +k 进入指定函数 (前提是光标停在指定函数上)open打开文件open 创建文件执行文件之后,创建的 myhello 权限并不是 777实际的文件权限 是 给定权限 取反 再和本地掩码 相与的结果可以使用 umask 临时指定本地掩码open 判断文件是否存在多加了一个 O_EXCLopen 截断某个文件(清空文件)read and write 函数包含头文件和格式如果fd 为 1 ,原创 2022-11-09 07:59:14 · 823 阅读 · 0 评论 -
Qt创建 简单的窗口跳转代码 (first 跳转到second; second跳转到first )
Qt创建 简单的窗口跳转代码 (first 跳转到second; second跳转到first )头文件包含 Second_Winsow.h 和 widget.h我的思路是先创建两个窗口( First 和 second), 有两种方式 ,让一个窗口为另外一个的成员。 或者创建两个类,两个窗口对象相互独立存在。//这里演示 让second 类成员成为First类的成员先看Second类的结构,Second_Winsow.h#ifndef SECOND_WINSOW_H#define SEC原创 2022-03-18 22:36:38 · 1343 阅读 · 0 评论 -
linux之用户指令
用户管理增加用户指令:useradd -m 用户名adduser 用户名(推荐)二者区别:1. 在root权限下,useradd只是创建了一个用户名,如 (useradd +用户名 ),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的情况出现,可以用 (useradd -m +用户名)的方式创建,它会在/home目录下创建同名文件夹,然后利用( passwd + 用户名)为指定的用户名设置密码。2. 可以直接利用adduse原创 2022-03-11 12:08:21 · 294 阅读 · 0 评论 -
linux 运行c# 环境搭建
linux (ubuntu)使用vscode搭建c#的环境第一步:根据linux发行版版本 安装 .net SDK具体详情可参考对于21.10版本使用 APT 进行安装可通过几个命令来完成。 安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加包存储库。wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages原创 2022-02-23 22:08:32 · 7309 阅读 · 0 评论