自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(392)
  • 资源 (25)
  • 收藏
  • 关注

原创 记一次表格数据排序优化(二)--std::sort + 运行模式光速排序

2 抛开排序之前的预处理遍历不谈,自写的冒泡算法在cache-miss上没有做任何考虑。std::sort在这方面可能也有所优化。沿着前面博客的思路,现在用std::sort代替自己写的冒泡算法。1 sort函数的复杂度是O(nlog(n)),而冒泡算法的复杂度是O(n^2)这里只修改了类ModelFreqDetect。在运行模式下测试,几乎没有任何卡顿。

2025-04-06 14:20:10 162

原创 记一次表格数据排序优化(一)--排序30000条数据有多卡

1 我的qt程序通过表格显示30000条数据。数据来自udp,udp每隔10秒发一次,一次含两个包。每包含有15000个数据。2 每条数据有三个属性,在表格中通过3列显示这三个属性。其中一个属性是区分“左”和“右”的。udp发送的两个包,一个包全是“左”属性,另一个包全是"右"属性。3 当用户点击三列中某一列的表头时,触发程序针对该列对应的属性进行排序。排序又分升序和降序。假如某列上一次使用升序排列,那么当用户再次点击该列表头时,该列变为降序排列。

2025-04-05 23:55:45 439

原创 MV结构下设置Qt表格的代理

所谓MV结构,是“model-view”(模型-视图)的简称。也就是说,表格的数据保存在model中,而视图由view实现。在我前面的很多博客,如我已经花了很多笔墨描述Qt表格的软件设计方法。在本篇文章中,我将介绍如何编辑表格--表格代理。

2025-01-28 16:45:50 1290

原创 linux源码编译libunwind

下载libunwind的源码。我选择9.0.0版本。

2024-12-22 20:09:26 379

原创 第一次使用address sanitizer记录

显然,delete 释放的首地址不对,比真正的首地址偏了一字节。于是,asan报错(上图绿色文字): 1 bytes inside of 10-byte region,并指出了错误发生的位置(紫色线标出的文字):main.cpp:6即main.cpp第六行。平台:中标麒麟,gcc 4.9.3。

2024-12-15 14:36:19 131

原创 源码编译glibc2.18过程记录

在某些操作系统里,libc.so.6没有debuginfo,影响我使用valgrind/systemtap调试。为此,我决定用源码编译一个与当前已有的libc.so版本相同的libc.so.6,并附带debuginfo。以下是过程记录。

2024-12-12 18:35:49 364

原创 理解原子变量之四:可见性、memory_order_acquire与 memory_order_release

则b线程读取该原子变量后,不仅可以看到该原子变量的更新值(也就是a线程写入的值),还能看到a线程对该原子变量进行写入之前的所有其他的写操作的效果,不论是针对该原子变量的,还是针对其他变量的,也不论这些变量是不是原子变量,也不论使用何种内存序。里的实例3里面,我们看到,如果在一个线程里修改原子变量done,另一个线程读取done时,就会看到这个变化。这就是原子变量的可见性。1 a线程对某原子变量进行了写入操作,且使用了内存序memory_order_release,最重要的是红线标出的这句话。

2024-11-23 18:51:33 433

原创 理解原子变量之三:原子性与memory_order_relaxed

在一位C++大神 “高效程序员” 的公众号里,有这么一篇文章介绍原子变量《C++11开发中的Atomic原子操作》。里面有这么一段话:“...原子操作,基本都包含...三个方面...的语义:操作本身是不可分割的(Atomicity),一个线程对某个数据的操作何时对另一个线程可见(Visibility),执行的顺序是否可以被重排(Ordering)”。Atomicity翻译过来就是原子性,Visibility翻译过来就是可见性。本文在前面两篇文章的基础上,进一步讲述原子性的含义。

2024-11-23 14:55:34 341

原创 源码编译安装perf

本文介绍如何通过源码编译的方式实现perf的安装。依赖安装完毕后,make clean,然后从新make perf。7 编辑~/.bashrc,在.bashrc的PATH加入/usr/local/bin。6 make结束后,将产生的perf拷贝到/usr/local/bin。在make过程的一开始,可能会检查依赖的情况。如下图所示,这里面,9 检查perf版本,有输出则安装成功perf --version。对于中标麒麟,虚拟机,版本是linux-4.4.13。,通过elfutils安装,参考我的博客。

2024-11-14 22:08:52 599

原创 理解原子变量之二:从volatile到内存序-进一步的认识

实例1,2,3都是在vs2013下演示的。即使遵循相同的C++标准,不同的编译器对同一个标准的贯彻程度也不一样:有的编译器严格遵循标准,既不多做,也不少做;对照实例1,在不使用volatile的情况下,子线程workerThread对done的修改,没有影响到主线程的while(!编译器意识不到子线程也在改变done的取值,所以就认为done是常量,而不会在运行到while()时读取done的实际值,于是while(!反观实例2和3,子线程修改了done,主线程的运行随之受了影响,这就是可见。

2024-11-03 11:30:09 1045

原创 理解原子变量之一:从互斥锁到原子变量,最粗浅的认识

多线程编程对于程序员来说,是一项非常重要的技能。在C++11标准问世之前,C++标准是不支持多线程的。在C++11出台前,如果你想在linux平台进行多线程编程,就要使用linux的多线程库pthread,而pthread是按照POSIX标准实现的,与C++标准无关。在C++11标准下,你可以使用std::thread,实现多线程编程。但是,多线程编程涉及的不仅仅是thread,编程者也要考虑资源竞争的情形,这就涉及到互斥锁、信号量等。这些也包含在c++11中。

2024-11-01 13:34:34 862

原创 初尝类型萃取--typename、模板偏特化、和traits之(三)类型萃取

本文作者在看过公众号《C++学习与探索》的文章《【一分钟学习C++】萃取机制》后,对类型萃取(type_traits)有了初步的认识,所以写下这篇博客。《【一分钟学习C++】萃取机制》门槛较高,如果没有理解typename和模板偏特化,是难以理解该文意思的。本文以及前面的两篇文章(初尝类型萃取--typename、模板偏特化、和traits之一、二)目的是将萃取涉及的基本知识点,如typename、模板偏特化先讲清楚,然后通过讲解例子的方式,使得类型萃取能被更多读者理解。

2024-10-17 20:32:16 1040

原创 初尝类型萃取--typename、模板偏特化、和traits之(二)模板偏特化

这里只讨论类的偏特化。

2024-10-16 20:46:03 291

原创 初尝类型萃取--typename、模板偏特化、和traits之(一)typename

此时的typename可以用class代替。

2024-10-16 20:32:38 338

原创 CMake学习笔记(四)cmake --build使用踩坑记录

将在目录中产生结果文件。但是实测发现,这里有坑:如果CMakeCache.txt等文件没有产生在中的话,cmake --build 将报错。只有先在目录下执行cmake ..,使得CMakeCache.txt产生在中,cmake -build 才能起作用。编译结果最终产生在build目录下。

2024-10-10 19:39:05 1629

原创 如何在Android Studio中找到CMakeLists.txt的打印信息

的描述,MESSAGE函数打印的STATUS级别的信息在android studio中是看不到的。所以采用WARNING级别打印。下面使用android studio 2023.2.1打印信息。

2024-10-09 22:06:03 512 1

原创 安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro。

2024-10-03 08:46:21 1448

原创 wireshark使用要点

但是实测wireshark发现,tcp[0:X], tcp[19:X], tcp[21:X]...等过滤效果都一样。ip.addr == XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX,或者消息目的地址为XXX.XXX.XXX.XXX的信息。ip.dst == XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息。ip.src == XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息。

2024-09-25 19:02:32 690

原创 冒泡排序的C++语言实现(不用std::sort)

自己写一个冒泡排序的代码。

2024-09-17 17:58:07 275

原创 比较stl库的ostringstream与Qt的QString::arg(),QString::number()

对于stringstream,使用比较繁琐,要联合使用std::fixed和std::setprecision才能实现固定小数位数显示,qstring则要简单一些。注意,使用qstring的时候,不论使用arg还是number,format输入参数都必须是'f',不能用'g',否则可能无法获得理想的效果。考虑STL库的ostringstream或者Qt的QString::arg(), number。显示一个float或者double类型的数,要求小数点后的数字位数为定值。

2024-09-11 22:07:56 476

原创 std::map 合并

假如map2的某些键也出现在map1里面,则map1中重复的键值对不变,map2中重复的键值对无法覆盖map1。采用insert函数实现两个map的合并。

2024-09-10 17:30:42 244

原创 std::bind与std::ref配合使用时要注意的几个问题

在前面的博客,我们看到假如std::bind的输入函数的输入变量是引用类型,则我们可以在std::bind中用std::ref修饰它们。

2024-06-23 15:52:46 301

原创 浅析std::ref

根据等消息来源的描述,需要std::ref的场景主要是如下三种:假如std::thread需要调用一个函数,且这个函数的输入参数是引用的话,则std::thread对这个参数的调用必须用ref修饰。假如sid::bind需要调用一个函数,且这个函数的输入参数是引用的话,则std::bind对这个参数的调用必须用ref修饰。stl库调用,比如for_each的输入参数里也可以有一个函数指针。假如这个函数的输入参数是一个引用,则函数指针也要用std::ref修饰。下面通过几个实例来验证以上描述的真伪。

2024-06-23 15:31:13 1126

原创 从三个示例看C++中 define...## 的用法

C++中define ...##...的作用是把##两边的内容连接到一起。

2024-05-18 17:05:27 381

原创 vs2008使用 openmp

环境windows7 vs2008。

2024-04-15 15:09:28 388

原创 CMake学习笔记(三)区分macro与function

因为macro的set(in "2")又定义了一个新的变量in,并赋值2。在执行set(in "2")之前,message("in = "${in})的内容已经被替换成message("in = 1"),所以set(in "2")对后面的语句没有影响,仍然输出1。(事实上,set(in "2")把in当成了一个新的全局变量,后面还会提到)。这也是set(in "2")起作用的原因。可见,test(1)调用时,in = 1,但是set(in "2")随后将in 改为2.所以接下来打印in = 2。

2024-04-05 18:31:35 775

原创 理解pytorch的广播语义

1 两个tensor都至少有一个维度;2 两个tensor的维度个数要么完全一样,那个维度较少的tensor可以把自己缺少的维度补充为1;3 补齐可以补充多个维度,但是只能发生在所有已有维度的左边,不能插在已有维度之间,也不能出现在已有维度右边。4 假如运算是原位运算,则保存运算结果的变量的尺寸不应在运算前后发生变化。

2024-04-04 11:07:00 1471

原创 CMake学习笔记(二)从PROJECT_BINARY_DIR看外部编译和内部编译

1 从哪个路径执行cmake命令,变量PROJECT_BINARY_DIR就等于这个路径2cmake产生的中间文件、结果文件都保存在与CMakeLists.txt一起的路径下,这叫做内部编译。反之,两者分开的,就是外部编译。3 ADD_SUBDIRECTORY的第二个输入参数指定了cmake产生结果文件的保存路径。假如不指定这个输入参数,则用来存放编译结果的文件夹就是${PROJECT_BINARY_DIR};

2024-03-26 22:14:43 1250

原创 CMake学习笔记(一)一个最简单的CMakeLists嵌套示例

这里,src文件夹需要稍后手动建立,因为在cmake之前,src里面要放进去源码。但是bin文件夹不需要手动建立,因为cmake过程中会自动建立bin。bin用来存放编译产生的结果文件。bin只是习惯的名称,你也可以换个名字,如bin1。这里顺便讲一下ADD_SUBDIRECTORY的用法它的第一个输入参数是用来存放源代码的文件夹,第二个参数是用来存放编译结果的文件夹。第二个参数可以输入,也可以不输入。

2024-03-26 21:00:12 835

原创 torch.multinomial()函数用法

在OpenAI联合创始人Andrej Karpathy的教程中,提到了函数torch.multinomial()。

2024-03-24 14:08:30 1482

原创 pytorch中tensor类型转换的几个函数

float函数:.int函数item函数。

2024-03-24 11:18:09 800

原创 pytorch如何向tensor结尾添加元素或维度--torch.cat()、torch.unsqueeze()的用法

0意味着新元素4将沿着1,5,0的方向连接下去。所以增加的是[[4,4,4]],而不是[4,4,4]。原来p是沿着1,5,0 ----->增加的,这是p唯一的维度。unsqueeze之后,[1,5,0]成为p的第一个元素,下面可以再增加一个三元tensor,接在[1,5,0]后面。p--p含有三个变量,而torch,Tensor([4])显然只有一个变量。如下图,q已经是2行3列的tensor了,但是还可给它添加1行3列的[4,4,4]增加[4,4,4]:(注意,这里加入的其实是[[4,4,4]])

2024-03-24 11:05:56 3656

原创 总结python sorted函数对list、dictionary和tuple排序的行为

sorted函数默认采用升序排列,即是说,“值比较小”的排在前面。在这个原则下,sorted函数对数字和字符串的排列行为都不难理解。假如被排序的容器,其元素不是简单的数字或者字符串,而是复杂的容器,如list dictionary或者tuple,排序行为是什么样的?

2024-03-23 21:02:51 770

原创 python 的zip函数的用法

zip在英语里的意思是拉链。想象两个列表(或任何可迭代的容器),a和b。两者各自有若干元素。zip返回值也是一个容器,容器的每个元素都是一个二元元组(tuple)。如下所示:这个结构像是现实中的拉链一样,所以叫zipzip具有如下性质:zip的返回值含有的元素个数与较短的输入容器相等。

2024-03-07 13:01:45 492

原创 arduino实现42步进电机运动控制(二)

本文参考了。

2024-02-21 09:00:00 2660

原创 arduino实现42步进电机运动控制(一)

本文参考了。

2024-02-17 00:00:58 4932 1

原创 linux(阿里云)安装pytorch

ubuntu22.04已经预装了python 3及pip。阿里云 ubuntu 22.04 UEFI版 64位。1 检查python3和pip3是否已经安装。3 安装完毕,检查pytorch版本。2 安装pytorch。

2024-02-15 17:31:50 934

原创 linux 安装docker

阿里云 ubuntu 22.04 64位。

2024-02-15 16:02:48 597

原创 linux源码编译安装llvm

本文受了的启发操作系统:银河麒麟虚拟机,安装前,保证操作系统已经安装cmake。

2024-01-23 09:00:00 2312

原创 Linux源码编译python3(以及必要的依赖包libffi)

安装完成后,libffi.so安装在/usr/local/ib中。由于银河麒麟已经预装了python2.7,所以要把新的python与旧的区别开。的说法,解决办法是安装libffi。下面通过编译源码安装libffi。确认/usr/local/lib出现在ld.so.conf中。完成这一步,你就可以看到python3的版本号了。6.6.1 建立python3的软链接。6.6.2 建立pip3的软链接。6.2 解压,并进入解压后的路径。2 解压源码,进入解压的路径。1 下载python3源码。

2024-01-20 17:39:25 2586

排序测试数据,分两部分,一个是属性为左,另一个属性为右 两者各15000条数据

排序测试数据,分两部分,一个是属性为左,另一个属性为右 两者各15000条数据

2025-04-06

std sort 完成qt表格排序

std sort 完成qt表格排序

2025-04-06

qt表格排序示例,使用mv结构

qt表格排序示例,使用mv结构

2025-04-05

介绍如何给Qt表格添加代理

介绍如何给Qt表格添加代理

2025-01-28

IMG_20240216_175113.jpg

IMG_20240216_175113.jpg

2024-02-16

QCustomPlot示例

QCustomPlot示例

2023-04-01

qsqlrelationaltablemodel使用示例

qsqlrelationaltablemodel使用示例

2022-11-06

Qt程序,将三沙市的GeoJson格式数据转化为mif文件

Qt程序,将三沙市的GeoJson格式数据转化为mif文件

2022-11-02

qt使用QProcess实现父子进程通信,适用linux平台

qt使用QProcess实现父子进程通信

2022-10-27

设置QTableView的内容自动换行,代理方式

采用代理方式,实现qtableview的文字自动换行

2022-09-25

示例:如何设置编辑QTableView单元格时的字体颜色

如何设置编辑QTableView单元格时的字体颜色

2022-09-25

基于qt的程序,演示了如何通过setStyleSheet配置checkbox按钮的外观。

基于qt的程序,演示了如何通过setStyleSheet配置checkbox按钮的外观。包括源代码和可执行程序。

2022-06-25

链接次序导致程序行为变化的示例

采用Qt编写。Dll1和Dll2是两个库,Dll1PlusDll2是调用前两者的工程。

2022-05-22

ctk框架源码,以及ctkData资源

ctk框架源码,以及ctkData资源,供编译ctk框架用

2022-05-04

使用qt读取xml文件并写入另一个文件

使用qt读取xml文件并写入另一个文件的示例

2022-05-01

基于Qt开发的C++程序。利用assimp读取gltf/fbx等文件,并显示

基于Qt开发的C++程序。利用assimp读取gltf/fbx等文件,并显示。用vs2013编译

2022-04-25

DXSDK 2010 Redistribution 32位 2010 Redistribution 64位

DXSDK 2010 Redistribution 32位 2010 Redistribution 64位 CMake assimp所需材料

2022-04-23

assimp 3.1.1的源码以及 用vs2013, vs2019分别编译产生的dll和lib(64位)

assimp 3.1.1的源码, 以及 用vs2013, 编译产生的64位dll-lib库; 用vs2019编译产生的64位dll和lib库

2022-04-23

定制QWidget标题栏的示例,并含有qss配置QTabWidget样式的示例

定制QWidget标题栏的示例,并含有qss配置QTabWidget样式的示例,以及展示如何显示一个不在状态栏出现的窗口

2022-04-10

ubuntu20.04下,采用Qt编译cuda的实例代码

ubuntu20.04下编译cuda,采用Qt的实例代码

2022-01-12

expandable.rar

基于qt可伸缩的窗口实现示例

2021-06-10

tableWrap.rar

qtableview文字根据列宽自动换行的方法

2021-05-27

gdalTif.rar

利用gdal将多通道tif转化为bmp

2021-04-10

Qprocess实例

演示QProcess的使用方法,在QT中直接打开word文档,并且考虑了指令中含有汉字的处理,和含有空格的处理。并考虑了内存释放

2020-10-01

htmlTable.rar

采用qt + html实现在表格中嵌入文本框+下拉框。文本框可编辑;下拉框中的选项可变。html与qt实现数据交互

2020-07-26

release.rar

这是c++ 多线程编程示例,演示了release 模式编译后带来的死循环问题。具体代码的解释见https://blog.youkuaiyun.com/liji_digital/article/details/104542544

2020-02-27

不使用bind的UDP

小例子。不使用bind函数,也可以建立udp套接字并与一个已知端口通信

2019-02-21

GDAL保存灰度BMP示例

根据我的博客《利用GDAL保存bmp格式的灰度图(一)》而上传的代码

2018-11-30

CVIEW显示灰度图示例

CVIEW显示灰度图示例,代码在https://blog.youkuaiyun.com/liji_digital/article/details/84502750 有解释

2018-11-25

基于qt的视频播放器

基于qt的视频播放器,支持本地mp4文件载入,进度显示,进度拖动

2018-11-03

基于opengl的曲线绘制示例

基于opengl的曲线绘制示例,缺点是,没有画出坐标轴。可以参考https://blog.youkuaiyun.com/liji_digital/article/details/78473568 来添加坐标轴

2018-10-15

QT信号槽传递自定义结构体示例

ArbStruct用于生成封装的类,UseArbStruct是主程序,它调用了ArbStruct

2018-09-13

mfc写入xls文件示例

mfc写入xls文件示例,VS 2008亲测可以运行。但是后来用vs2017打开过一次,sln被升级了。可以参照我的博客新建一个同名工程,再操作一遍,把其中的cpp文件,h文件和资源文件拷贝到新的工程里编译运行即可。

2018-09-05

虚拟地球apk

将apk下载到android手机上,安装即可。安装之后,运行程序,并将手机置于google的cardboard中,用户将看到一个有立体感的旋转地球。

2018-04-26

地球纹理贴图

用于OpenGL绘制地球,与我的博客《qt + opengl 绘制地球》中的代码配合使用

2017-11-22

pyserial-2.6

解压即可,看我的博客《利用python发出rs232信号(一)》里面有详细介绍

2016-07-31

空空如也

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

TA关注的人

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