- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 LINUX CPU 热点分析
通过“进程→线程→函数”逐层下钻,定位高CPU问题:先用top或ps找出异常进程PID,再用top -H -p PID或ps -L定位高负载线程TID,最后以perf record -t TID -g采样并用perf report分析函数级热点。关键需编译时加-g和-fno-omit-frame-pointer以确保调用栈准确。
2026-11-01 21:25:42
79
原创 C++之 概念(Concepts)为模板参数赋予语义约束的编译期谓词系统(一、概念的定义)
C++概念(concept)是模板参数的编译期约束工具,通过concept关键字定义类型必须满足的语义契约。它取代复杂的SFINAE技术,提供显式接口约束,使错误在调用点即时诊断。概念定义语法为concept name = 约束,约束可以是requires表达式或标准库概念。requires表达式支持四种要求:简单要求(验证表达式有效性)、类型要求(验证类型存在)、复合要求(验证返回类型)和嵌套要求(编译时布尔表达式)。标准库提供了丰富预定义概念,涵盖类型分类、迭代器、范围等。概念组合使用逻辑运算符,实现&
2026-03-02 21:40:57
899
原创 C++之 标准库提供的预定义概念(常用的部分)
C++20标准库提供了丰富的预定义概念(concepts),用于约束模板参数类型。这些概念主要分为:1)基础类型概念(如integral、floating_point等);2)类型关系概念(same_as、derived_from等);3)比较概念(equality_comparable等);4)对象概念(movable、copyable等);5)可调用概念(invocable、predicate等);6)迭代器概念(input_iterator等);7)范围概念(range、view等)。使用示例展示了如
2026-02-24 16:39:33
187
原创 C++之协程(Coroutines) 异步编程范式的重大革新(一)【基础】
从上面的定义中我们可以看出,我们必须实现get_return_object、initial_suspend、final_suspend等方法,且其返回值必须满足Awaitable的约束。std::coroutine_handle 是协程的唯一标识符和控制手柄,它提供了对协程的生命周期管理(恢复、销毁)和状态查询(完成状态、promise 访问)的能力。从上面我们可以清楚的看出,我们必须实现await_ready、await_suspend、await_resume方法,以及他们各自的约束。
2026-01-04 15:17:51
675
原创 C++之constexpr 编译时计算
constexpr是C++从11标准开始引入的核心特性,它代表“常量表达式”,旨在将计算从运行时转移到编译时,实现真正的零开销抽象。其核心思想是:允许编译器在编译期间执行函数和对象初始化,从而消除运行时开销,同时增强代码安全性。演进历程展现了C++对编译时计算能力的持续强化。C++11中,constexpr函数只能包含单条return语句,主要用于基础数学计算。C++14解除了函数体限制,允许循环、分支和局部变量,使复杂算法得以编译时执行。
2025-12-22 18:03:18
727
原创 三维旋转变换
下面列出了基于各种旋转顺序的组合函数,矩阵公式,以便于使用时直接拷贝,避免代码的编写错误,以及公式推导错误。废话不多说,直接上代码。下面是我写的测试验证DEMO。
2025-12-17 16:53:03
249
原创 C++之C++17新特性(总结)
std::optional 解决“无值”表示的问题结构化绑定内联变量(Inline Variables)C++17在C++语言的演进史上占据着独特而关键的位置,它被广泛视为一个"承前启后的完善者"和"务实的问题解决者"。这个版本的定位既不像C++11那样带来范式革命,也不像后来的C++20那样引入颠覆性概念,而是专注于在C++11/14奠定的现代C++基础之上,进行系统性的打磨、补充和优化。
2025-11-28 16:17:07
1035
原创 QGIS源码学习--二维渲染流程分析(一)
QgsMapCanvasMap里面包含了QIamge,实际上,我们会先将一个一个的图层数据绘制到一张图片上,然后把图片贴在地图(QgsMapCanvasMap)上,在把地图放画框里面,这样我们就看见了二维渲染的效果了。嗯~,它获取了mJob里面当前渲染的图像,然后给到map渲染了(这就是当我们数据量很大的时候,会看到数据在逐步渲染的过程)这是一种类离屏渲染的技术,即:先将成果渲染到Image里面,然后将Image渲染到屏幕上。我们获取了job中的最终成果图像,并间图像渲染道路Map里面,然后清除了job。
2025-11-25 18:54:13
770
原创 C++之C++11新特性(总结)
C++11标准(原名C++0x)是C++编程语言一次里程碑式的革命性升级,其根本定位是对这门已有三十余年历史的语言进行一场全面而深刻的现代化重构,旨在彻底解决C++98/03标准在应对多核硬件普及、软件系统日益复杂化以及现代编程范式演进时所暴露出的诸多局限性。这次更新并非简单的功能增补,而是从语言核心、标准库到编程哲学层面的系统性进化,其扩展范围之广、影响之深远,被誉为“一门新语言的诞生”。在核心语言层面,C++11进行了多维度的范式革新。
2025-11-24 11:19:04
953
原创 C++之std::optional 解决“无值”表示的问题
那么使用std::optional后会怎么样呢,由于std::optional是一个明确的标准,是大家都知道的。我使用了std::optional就是要告诉你,我的函数存在“可能没有值”的情况,你在使用时要注意判断,如果你还是没有判断,那就怪不得我了,因为我在语义已经告诉你了,你不听,又怎能怪我呢,对吧?也许有的人在写程序时,并没有太过在意这些问题,有的人可能在这里纠结了半天:我该如何表示没有值的情况,没有值的情况下,我的函数该返回什么才能保证编译通过,才能在调用时能够知道当前是否有值或者是有效值?
2025-11-20 11:30:40
737
原创 C++之结构化绑定
(1)当类/结构体的所有成员变量都是公有的时,可以直接绑定,如下所示int _id;int main()输出如下:(2)当类/结构体包含非公有的成员变量时,需要特化std::tuple_size 、std::tuple_element以及get 函数实现,如下所示private:int _id;
2025-11-19 14:16:55
941
原创 C++之std::tie 元组创建与解包工具
std::tie是C++11提供的一个非常实用的用于解包元组或结构体、创建元组的左值引用的工具, 其定义在 头文件中,它创建一个元组,其中每个元素都是传入参数的左值引用。其原型如下所示从原型上,我们可以看出,其输入是一系列左值引用,返回值是一个tuple(元组)std::tie主要有两大功能:解包元组或结构体、创建元组的左值,下面我将分别介绍。
2025-11-13 16:12:45
388
原创 C++之内联变量(Inline Variables)
1、直接在头文件中定义全局变量,当存在多个cpp文件引用该头文件时,编译出现重定义错误开发效率:减少文件切换,代码更集中维护性:配置集中,易于修改和理解,避免了繁琐的分离定义,实现一切在头文件中完成性能:编译期优化,零运行时开销安全性:解决静态初始化顺序问题模板编程:极大简化模板静态成员,避免了显式实例化噩梦代码质量:减少重复,提高一致性。
2025-11-10 16:23:42
1135
原创 面向对象的基本原则【学习、记录】
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。就一个类而言,应该仅有一个引起它变化的原因。一个软件实体应当对扩展开放,对修改关闭。如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型S是类型T的子类型。所有引用基类(父类)的地方必须能透明地使用其子类的对象。高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。要针对接口编程,不要针对实现编程。
2024-12-25 18:05:49
336
原创 QGIS源码学习--QGIS整体框架分析
qgis、qgis_app、qgis_core、qgis_gui、qgis_analysis、qgis_3d、provider_系列,test_系列,plugin系列、authmethod系列、python系列等。(4)qgis_gui:也是一个基础支撑模块,可以说与core一起组成qgis核心基础支撑,包含一些通用gui的实现代码。(2)qgis_app:包含的qgis整个应用界面的实现与组装,实现了QGIS软件界面及其交互过程。(3)qgis_core:实现了对数据、工程的管理,属于核心模块。
2024-06-07 21:17:12
1077
原创 基于后缀表达式的四则运算求值
最近学习数据结构,说到栈结构的一大应用就是基于后缀表达式的四则运算求值,那么什么是后缀表达式呢?让我们来简单举个栗子:比如我们正常的数学表达式 3+1,我们称这种表达式为中缀表达式其后缀表达式为3 1 +,嗯...,没错,就是把运算符号写在相互运算的两个数字的后面
2022-11-06 22:18:11
432
原创 数据结构 —— 栈的顺序存储结构与链式存储结构 代码
最近复习数据结构,学到栈这里,说到栈是限定仅仅在表尾进行插入和删除操作的线性表,其实现同线性表一样具有顺序存储结构与链式存储结构两种实现方式,本人基于着两种方式对栈结构进行了实现
2022-11-06 21:29:22
319
翻译 OPENDL —— glGenFramebuffers 生成帧缓冲区对象
glGenFramebuffers返回id中的n个帧缓冲区对象名称。不能保证这些名称构成一组连续的整数;但是,可以保证在调用glGenFramebuffers之前,没有任何返回的名称正在使用。
2022-10-25 21:08:29
540
翻译 OPENGL—— glGenVertexArrays 生成顶点数组对象
glGenVertexArrays在数组中返回n个顶点数组对象名称。不能保证这些名称形成一组连续的整数;但是,可以保证在调用glGenVertexArrays之前没有使用任何返回的名称。调用glGenVertexArrays返回的顶点数组对象名称不会由后续调用返回,除非首先使用glDeleteVertexArrays删除它们。数组中返回的名称被标记为已使用,仅用于glGenVertexArrays,但它们仅在首次绑定时获取状态和类型。
2022-10-19 21:48:08
1152
原创 OPENGL —— 创建顶点着色器
使用GLSL语言编写着色器使用glCreateShader创建着色器对象使用glShaderSource把这个着色器源码附加到着色器对象使用glCompileShader编译着色器使用glGetShaderiv检查编译是否成功
2022-10-18 21:12:33
395
翻译 OPENGL—— glBufferData / glNamedBufferData
glBufferData和glNamedBuffer数据为缓冲区对象创建新的数据存储。对于glBufferData,使用当前绑定到目标的缓冲区对象。对于glNamedBufferData,将改用与缓冲区中调用者指定的ID关联的缓冲区对象。
2022-10-18 20:31:45
455
翻译 OpenGL—— glBindBuffer
glBindBuffer将缓冲区对象绑定到指定的缓冲区绑定点。调用glBindBuffer时,将目标设置为一个可接受的符号常量,并将缓冲区设置为缓冲区对象的名称,将该缓冲区对象名称绑定到目标。如果不存在名为buffer的缓冲区对象,则会使用该名称创建一个缓冲区对象。当缓冲区对象绑定到目标时,该目标的前一个绑定将自动断开
2022-10-17 21:42:55
594
翻译 OpenGL —— glGenBuffers
glGenBuffers在缓冲区中返回n个缓冲区对象名称。不能保证这些名称形成一组连续的整数;但是,可以保证在调用glGenBuffers之前没有使用任何返回的名称。调用glGenBuffers返回的缓冲区对象名称不会由后续调用返回,除非首先使用glDeleteBuffers删除它们。
2022-10-17 21:20:11
642
原创 Qt Widgets C++ --- Main Window and Related Classes --- QDockWidget
dockWidget是支持悬浮与停靠的Widget,Dock窗口是位于QMainWindow中中央小部件周围的Dock小部件区域中的辅助窗口,可以在其当前区域内移动,移动到新区域,浮动等。QDockWidget由标题栏和内容区域组成。标题栏显示dockwidgets窗口标题、浮动按钮和关闭按钮。QDockWidget充当其子小部件的包装器,用setWidget()设置。如下图所示,在VS中,输出、错误列表、解决方案管理器等窗口都类似这里的dockWidgetQt。...
2022-07-31 15:55:48
333
原创 Qt Widgets C++ --- Main Window and Related Classes --- QMdiArea
介绍关于与QMidArea的使用
2022-06-26 17:54:19
545
原创 PIESDK二次开发——矢量数据的创建与保存(C#)
强调文本 强调文本加粗文本 加粗文本标记文本删除文本引用文本H2O is是液体。210 运算结果是 1024。
2021-09-18 15:31:04
877
原创 PIESDK二次开发——C++(QT)组件式二次开发
PIESDK二次开发——C++(QT)组件式二次开发新建Q tWidgets Application工程,选中Debug(Core,GUI,Widgets),然后点击 next -> finish;配置环境(1)在工程文件夹下,新建(myApp)文件夹,然后将PIESDK中的Debug_x64以及config文件夹复制到新建文件夹下,删除Debug_x64下多余内容(保留dll文件以及所有文件夹内容即可)(2)属性 —— 常规 ——输出目录:选择…\MyApp\Debug_x6.
2021-09-07 09:57:04
1345
1
原创 PIESDK二次开发——栅格数据的读取与保存
PIESDK二次开发——栅格数据的读取与保存1、栅格数据的读取使用IMapControl接口,// 函数原型:bool AddLayerFromFile(String filePath,int toIndex); // 在当前地图显示控件中通过文件路径添加图层,参数为目标文件路径及添加到的索引值。// 示例:IMapControl mapControl = null;mapControl = mapControl1;mapControl.AddLayerFromFile(".
2021-08-16 14:57:45
1200
原创 字符串操作
C++字符串操作构造函数1)string(const char *s) :将 string 对象初始化为 s 指向的字符串2)string(size_type n,char c) :创建一个包含 n 个元素的 string 对象,其中每个元素都被初始化为字符 c3)string(const string &str) :将一个 string 对象初始化为 string 对象 str(复制构造函数)4)string() :创建一个默认的 string 对象,长度为 0(默认构造函数).
2021-08-12 16:28:25
246
原创 PIE-SDK 二次开发之插件式二次开发
PIE-SDK 二次开发PIE-SDK是一套PIE的可重用的通用的二次开发组件集,基于PIE-SDK我们可以进行组件式和插件式的二次开发,下面我将分别介绍如何使用PIE-SDK进行组件式和插件式的二次开发注:需要安装好vs2015以及PIE-SDK插件式二次开发PIE-SDK 支持我们进行Command、Tool以及Control三种类型的插件的二次开发,同时为我们提供了可直接使用的PIE桌面应用程序的界面,其中:Command,命令,功能不需要鼠标和地图进行交互,例如全图显示,点击按钮
2021-08-09 13:52:34
1695
原创 PIE-SDK 二次开发之组件式二次开发
PIE-SDK 二次开发PIE-SDK是一套PIE的可重用的通用的二次开发组件集,基于PIE-SDK我们可以进行组件式和插件式的二次开发,下面我将分别介绍如何使用PIE-SDK进行组件式和插件式的二次开发注:需要安装好vs2015以及PIE-SDK组件式二次开发为支持组件式二次开发,PIE-SDE为我们提供了MapControl、TOCControl、PageLayoutControl三个控件使用,其中MapControl控件主要用于地图数据的显示和分析,TOCControl主要用于显示数
2021-08-08 18:31:49
1617
原创 GDAL常用命令——遥感图像处理
GDAL常用命令——遥感图像处理最近在做一些遥感图像处理的工作,经常会调用一些gdal的命令对遥感影像进行处理,下面我将对一些常用的gdal命令进行简介,以便今后的学习与使用gdal 栅格图像处理常用命令1、 gdalinfo 查询栅格数据集信息, 常用参数:-json 以json格式输出数据;例子:gdalinfo XXX.tif2、gdal_translate 该命令可以在不同格式之间转换栅格数据,如数据类型转换以及设置无效值等常用参数:-ot 强制输出图像带具有驱动程序支持的特
2021-08-07 14:43:25
1800
原创 SpringBoot 向容器中添加组件
SpringBoot 向容器中添加组件使用@Configuration+@Bean方法首先编写一个要加入的组件类,(一般情况在主程序文件夹下兴建Bean文件夹,将组件类存放在其中,我的路径如下com.example.demo.Bean)示例如下:package com.example.demo.Bean;public class Person { public String name; public int age; public Person(){} publ
2021-01-20 21:51:58
689
原创 PyQt tableview使用方法
最近的实习任务中要求使用pytq进行qgis的二次开发,在这个过程中那我们用到了tableview这个插件,对于这个插件,我们要求通过选择事件在tableview里面显示数据,更改表格数据并获取更改后的数据,下面我将逐步介绍如何实现此操作:使用QT designer设计一个table view控件,如下图所示:上面两个按钮,一个用来生成数据、一个用来获取数据;在设计完成ui界面以后,接下来我们要将ui界面转换成py文件;我们ui.py文件内容如下:// ui.py# -*- coding.
2020-06-10 20:13:09
10296
原创 QGIS插件开发(Python+Qgis+pyqt+pycharm)
在最近的实习课程中,我们老师要求我们使用pycharm+pyqt+qgis库生成独立应用,然后通过修改将其转换成QGIS插件。通过老师的介绍可知一般情况下一个插件必须包含一下四个文件:1、初始化文件__init__.py2、插件主体文件plugin.py3、生成界面文件form.ui所转换的form.py4、插件元数据文件meradata.txt一般情况下,伴随ui文件会有一份资源文件生成,即resources.qrc,如果你的插件没有资源文件,那么将可以直接不要此文件综合上面的介绍一个插件的
2020-06-03 16:03:44
3078
site_selection_plugin_changed.rar
2020-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅