
C++
文章平均质量分 53
一枚小菜程序员
大家好,俺是 干啥啥不行,吃饭第一名,称霸幼儿园
展开
-
记录: Windows下远程Liunx 系统xrdp 用到的一些小问题(免费踩坑 记录)
在Ubuntu 22.04及以下版本中,安装和配置xrdp或VNC以启用远程桌面连接涉及多个步骤。首先,更新系统包并安装xrdp服务,随后启动并设置为开机自启。为了确保图形界面正常显示,需修改startwm.sh文件,并调整分辨率设置。此外,通过调整xrdp.ini中的TCP缓冲区大小和系统参数,可以优化远程连接的流畅性。对于Qt GUI显示问题,安装xcb插件可能解决。系统设置中还需处理双显示屏和自动登录问题,确保远程连接无需额外验证。整个过程涉及系统配置和网络优化,确保远程桌面体验的顺畅和高效。原创 2025-05-14 22:54:21 · 577 阅读 · 0 评论 -
关于QT多线程中回调函数的应用
其实质就是函数指针的操作,通常采用C语言定义函数,C++也可以用 using 定义函数指针。C++ 函数定义:using func = void(*)(char*,int);C语言这样定义: typedef void(*func)(char*,int);对于函数 void function(char*,int)1. 回调函数机制,可以提前注册相关事件,进行回调。使用call模块,并监听回调函数。运行后每秒打印一次当前鼠标位置。转载 2023-10-31 20:23:28 · 941 阅读 · 0 评论 -
关于VS2017中运行QT图像处理(包括gdal,OpenCV等 )
如果项目中存在是.pro 文件,需要用VS中QT tool工具pro产生.sln1.用VS上的Qt插件打开.pro项目2、保存.slnsln产生.pro1.右击项目,点击“Create Basic .pro File…”。注:若第一步中的选项为灰色,则先点击“Convert Project to Qt VS Tools Project”,再执行上一步骤的操作。选中项目,鼠标右键属性。原创 2023-02-24 11:38:03 · 1022 阅读 · 0 评论 -
C语言中常见的逻辑错误
记录交流原创 2022-11-23 15:12:56 · 3374 阅读 · 0 评论 -
Linux线程函数以及分离属性
多线程原创 2022-07-19 11:15:57 · 356 阅读 · 0 评论 -
Linux ----->信号操作
信号的状态信号有三种状态产生、未决和递达。递达递送并且到达进程。原创 2022-07-16 11:20:18 · 245 阅读 · 0 评论 -
进程间通信
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcessCommunication)。...原创 2022-07-15 22:09:55 · 126 阅读 · 0 评论 -
C++ 进程控制
C++ 进程控制原创 2022-07-15 22:03:17 · 418 阅读 · 0 评论 -
总结Linux下常用函数
常用函数 建议学习原创 2022-07-15 11:11:14 · 2050 阅读 · 0 评论 -
C++ 可调用对象包装器 function
std::function 必须要包含一个叫做 functional 的头文件,可调用对象包装器使用语法如下:下面的实例代码中演示了可调用对象包装器的基本使用方法:结果:通过上面的例子可以看出,使用对象包装器 std::function 可以非常方便的将仿函数转换为一个函数指针,通过进行函数指针的传递,在其他函数的合适的位置就可以调用这个包装好的仿函数了。另外,使用 std::function 作为函数的传入参数,可以将定义方式不相同的可调用对象进行统一的传递,这样大大增加了程序的灵活性。...原创 2022-06-25 15:20:45 · 440 阅读 · 0 评论 -
C++可调用对象
在 C++ 中存在 “可调用对象” 这么一个概念。准确来说,可调用对象有如下几种定义: 在上面的例子中满足条件的这些可调用对象对应的类型被统称为可调用类型。C++ 中的可调用类型虽然具有比较统一的操作形式,但定义方式五花八门,这样在我们试图使用统一的方式保存,或者传递一个可调用对象时会十分繁琐。现在,C++11通过提供std::function 和 std::bind统一了可调用对象的各种操作。关注我,带你感受Cpp...原创 2022-06-25 11:39:28 · 840 阅读 · 0 评论 -
C++ 可调用对象绑定器bind()
在 C++11 里已经 deprecated 了,建议使用新标准的 。 下面来看一个关于绑定器的实际使用的例子:结果:有了占位符的概念之后,使得 std::bind 的使用变得非常灵活:示例代码执行的结果:通过测试可以看到,std::bind 可以直接绑定函数的所有参数,也可以仅绑定部分参数。在绑定部分参数的时候,通过使用 std::placeholders 来决定空位参数将会属于调用发生时的第几个参数。...原创 2022-06-25 11:34:50 · 452 阅读 · 0 评论 -
libevent的使用
下面介绍一些常用函数:对于不同系统而言, event_base就是调用不同的多路IO接口去判断事件是否已经被激活, 对于linux系统而言, 核心调用的就是epoll, 同时支持poll和select.查看libevent支持的后端的方法有哪些: libevent在地基打好之后, 需要等待事件的产生, 也就是等待事件被激活, 所以程序不能退出, 对于epoll来说, 我们需要自己控制循环, 而在libevent中也给我们提供了API接口, 类似where(1)的功能.函数如下:这个函数一般不用,原创 2022-06-20 22:27:22 · 1153 阅读 · 0 评论 -
网络编程之 libevent库介绍
目录介绍基本概念:介绍一下库的内容: libevent库例的使用原创 2022-06-20 21:33:45 · 593 阅读 · 0 评论 -
linux 下 条件变量、信号量
linux 下 条件变量、信号量原创 2022-06-20 11:50:31 · 511 阅读 · 0 评论 -
Linux下进程、线程,锁
废话不多说,直接看目录进程:线程:锁:互斥锁:读写锁:原创 2022-06-19 12:28:38 · 830 阅读 · 0 评论 -
线程同步问题再探
假设有 4 个线程 A、B、C、D,当前一个线程 A 对内存中的共享资源进行访问的时候,其他线程 B, C, D 都不可以对这块内存进行操作,直到线程 A 对这块内存访问完毕为止,B,C,D 中的一个才能访问这块内存,剩余的两个需要继续阻塞等待,以此类推,直至所有的线程都对这块内存操作完毕。 线程对内存的这种访问方式就称之为线程同步,通过对概念的介绍,我们可以了解到所谓的同步并不是多个线程同时对内存进行访问,而是按照先后顺序依次进行的。例子: 结果:通过对上面例子的测试,可以看出虽然每个线程内部原创 2022-06-19 11:44:21 · 85 阅读 · 0 评论 -
C++解析Json之 RapidJson库
RapidJSON 是一个 C++ 的 JSON 解析器及生成器。它的灵感来自 RapidXml。使用方法:RapidJSON: 首页http://rapidjson.org/zh-cn/index.html这里 rapidjson 为作用域; 那么现在该 JSON 就会被解析至 中,成为一棵 *DOM 树 *: 举例: 让我们查询一下根 Object 中有没有 成员。由于一个 可包含不同类型的值,我们可能需要验证它的类型,并使用合适的 API 去获取其值。在此例中, 成员关联原创 2022-06-16 22:33:54 · 3295 阅读 · 0 评论 -
排序算法 面试必备
快速递归 挖坑法void quick_sort(vector<int>& nums, int l, int r){ if (l + 1 > r) return ; int first = l, last = r - 1, key = nums[first]; while (first < last) { while (first < last && key <= nums[last]) { last--; } n原创 2022-05-19 15:13:13 · 222 阅读 · 0 评论 -
面试题之String 类实现
class String{public: //赋值构造函数 String(const char str[]) { if (str == nullptr) { data = new char[1]; data = '\0'; } else { data = new char[strlen(str) + 1]; strcpy(data, str); this->length = strlen(str); } } //拷贝构造函数 S.原创 2022-05-19 15:08:42 · 182 阅读 · 0 评论 -
makefile文件进行编译软件-make
使用 GCC 的命令行进行程序编译在单个文件下是比较方便的,当工程中的文件逐渐增多,甚至变得十分庞大的时候,使用 GCC 命令编译就会变得力不从心。这种情况下我们需要借助项目构造工具 make 帮助我们完成这个艰巨的任务。 make 是一个命令工具,是一个解释 makefile 中指令的命令工具,一般来说,大多数的 IDE 都有这个命令,比如:Visual C++ 的 nmake,QtCreator 的 qmake 等。make 工具在构造项目的时候需要加载一个叫做 makefile 的文件,makef原创 2022-05-03 09:43:14 · 918 阅读 · 0 评论 -
g++ 和 gcc 的区别
在编译阶段:后缀名 .c文件 gcc 当做c程序处理 g++当做c++程序处理。 后缀名.cpp文件 两者都认为cpp进行处理 C++语法严谨一些 g++会调用gcc 对于C++代码 两者等价 都可以编译C++连接阶段:g++ 和gcc 都可自动连接到标准库C g++ 自动连接到C++库 gcc需要加入 -lstdc++都可以定义 -CPlusePluse...原创 2022-03-24 10:51:38 · 1066 阅读 · 0 评论 -
Linux 静态库
不管是 Linux 还是 Windows 中的库文件其本质和工作模式都是相同的,只不过在不同的平台上库对应的文件格式和文件后缀不同。程序中调用的库有两种 静态库和动态库,不管是哪种库文件本质是还是源文件,只不过是二进制格式只有计算机能够识别,作为一个普通人就无能为力了。在项目中使用库一般有两个目的,一个是为了使程序更加简洁不需要在项目中维护太多的源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写的程序开源出来。当我们拿到了库文件(动态库、静态库)之后要想使用还必须有这些库中提供的 API原创 2022-03-22 11:36:52 · 1463 阅读 · 0 评论 -
结构模式 之 代理模式
代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。为什么要用代理模式?中介隔离作用:在某些情况下,一个客户类不想或者不能原创 2022-03-02 14:27:06 · 100 阅读 · 0 评论 -
结构模式 之 桥接模式
桥接模式(Bridge) 桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接简单一点就是 A工厂产生CPU A1工厂借鉴A产生CPU1.0 A2工厂借鉴A...原创 2022-03-02 11:20:03 · 690 阅读 · 0 评论 -
C++:编译器合成默认构造函数和复制控制成员的条件
(参考自《深入理解C++对象模型》)”C++新手一般有两个常见的误解:任何class如果没有定义default constructor,就会被合成一个出来.编译器合成出来的default constructor会明确设定class 内每一个data member的默认值.”现在主要解释第一条为什么是错误的,根据《深入理解C++对象模型》,”default constructor 在需要的时候被编译器产生出来”,以下就是4种”需要的时候”:1). 该类含有一个成员对象而后者有一个默认构造.原创 2022-03-01 09:01:43 · 272 阅读 · 0 评论 -
原始字面量
前几天介绍的C++11特性一直没有时间介绍 今天介绍下在 C++11 中添加了定义原始字符串的字面量,定义方式为:R “xxx(原始字符串)xxx” 其中()两边的字符串可以省略。原始字面量 R 可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。比如:编程过程中,使用的字符串中常带有一些特殊字符,对于这些字符往往要做专门的处理,使用了原始字面量就可以轻松的解决这个问题了,比如打印路径:#include<iostream>#include<string原创 2021-12-11 10:56:24 · 431 阅读 · 0 评论 -
面试题之深浅拷贝问题
浅拷贝是按字节拷贝, 我们默认不写编译器生成的拷贝构造就是浅拷贝,当我们类中存在资源时,如果调用拷贝构造, 此时两个对象都共用了一份资源, 各自调用析构时会产生二次释放的问题;深拷贝是重新申请一个新的空间分配给新拷贝的对象, 两个对象各自使用不同内存空间的资源, 调用析构时就不存在二次释放的问题深拷贝代码:class Strings{public: Strings(const char* str = "") { assert(str != nullptr); _...原创 2021-12-06 10:25:38 · 479 阅读 · 0 评论 -
面试题之实现一个String类
先贴代码:class String{public: String(const char* str = nullptr)//有参构造 { assert(str != nullptr); _str = new char[strlen(str) + 1]; strcpy(_str, str); } String(const String& s):_str(nullptr) //拷贝构造函数 { _str = new char[strlen(s._str) + 1].原创 2021-12-06 10:11:47 · 520 阅读 · 0 评论 -
面试题之锁
问题:请你谈谈 常见的锁有哪些?答:悲观锁,乐观锁,互斥锁,自旋锁,读写锁。悲观锁:悲观锁是认为我们在使用共享资源时会被其他线程修改,容易导致线程安全的问题,所以在访问前总是先对共享资源进行加锁,阻塞其他线程。适用于经常进行写操作的场景乐观锁:乐观锁通常以CAS操作和版本号机制来实现。其悲观锁相反,会直接对共享资源进行修改,但是在提交更新修改结果前会验证这修改期间有没有其他线程对该资源进行修改,如果没有则提交更新,如果有则放弃本次操作。适用于经常进行读操作而很少进行写操作的场景互斥锁:互斥锁原创 2021-12-04 15:44:53 · 308 阅读 · 0 评论 -
C++ 11标准新增加的特性(面试题的考点)
字符串原始字面量 指针空值雷子那个的改变 nullptr constexpr修饰常量表达式 增加auto decltype 自动类型推导原则 final 关键字的使用 overrid 关键字的使用 对模板右尖括号的优化 使用using给函数起别名 以及 定义函数指针 委托构造函数 和 继承构造函数 initializer_list 模板类的使用 可调用对象 以及可调用对象包装器的使用 绑定器的使用 ...原创 2021-12-04 15:37:53 · 870 阅读 · 0 评论 -
手撕智能指针实现
智能指针的原理: 设置一个指针 一个计数器 每创建一个对象计时器加一 (创建对象: 有参构造 默认构造 拷贝构造 ) 每次销毁一个new出来对象时 计数器减一,当计数器减为零时,之间删除指针和计数器。在重载等号运算符时要记住 先判断是否对应指针相等如果相等 直接返回对应原对象 this如果不相等 需要对与那对象复制一份template<class T>class SmartPtr{public: SmartPtr(T* Ptr=nullptr)...原创 2021-12-04 14:50:26 · 583 阅读 · 0 评论 -
g++和gcc的相同点和区别
共同点:都可以用来编译后缀名为:.c 和.cpp文件。gcc是鼻祖,后来才出现g++;gcc和g++都是GNU(一个组织)的编译器。1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C++程序;2、对于.cpp后缀的文件,gcc和g++都会当做c++程序。3、编译阶段,g++会调用gcc;4、连接阶段,通常会用g++来完成,这是因为gcc命令不能自动和c++程序使用的库连接。不同点:1.g++会自动链接c++的编译库:比如algorith,string,vect..原创 2021-11-08 21:53:14 · 140 阅读 · 0 评论 -
Qt 停靠窗口的实现
Qt创建停靠悬浮窗口1.Qt实现窗口停靠和悬浮使用类QDockWidget,它有两个重要方法用来设置停靠特性以及停靠区域, dw1->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);//设置停靠窗口特性,可移动,可关闭 dw1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置可转载 2021-10-29 16:40:58 · 1568 阅读 · 0 评论 -
Qt 子窗口内嵌到父窗口中
有时需要把一个子窗口内嵌进入父窗口当中。我们可以这样做1.新建一个QWidget 或者QDialog的子类 ClassA(父类为ClassB)2.在新建类的构造函数中添加设置窗口属性setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);关闭默认的窗口标题提示以及没有边框的窗口。3.在父窗口中调用。ClassA*Subclass;Subclass=newClassA(this);...转载 2021-10-29 11:26:36 · 6921 阅读 · 2 评论 -
QT 父窗口析构,子窗口不调用析构函数问题(不关闭问题)
在使用VS+Qt做图像处理软件项目开发时,有一个父(主)窗口和若干子窗口,点击主窗口的按钮,子窗口弹出,要求不管子窗口打没打开,关闭父窗口时退出应用程序。原因分析:窗口类有两个函数值得注意,一个是类的析构函数,一个是窗口关闭事件;当窗口关闭时,调用顺序是先进入窗口关闭事件,然后进入析构函数,子窗口的退出在父窗口的析构函数中。当子窗口显示时,关闭父窗口,只会进入窗口关闭事件,而不会进入父窗口的析构函数,因此子窗口得以保留;而子窗口未显示时,关闭父窗口,父窗口会依次进入关闭事件和析构函数。当子窗口转载 2021-10-29 10:14:35 · 1844 阅读 · 0 评论 -
买卖股票的最佳时机 II
给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来 来 来 看过来Go:func maxProfit(prices []int) int { var result int=0 for i:=1;i<len(prices);i++ { result .原创 2021-10-23 09:39:55 · 100 阅读 · 0 评论 -
cvui模块加入opencv_QT
因为cvui 是opencv 的封装模块,可以直接依赖opencv DLL库 有时需要openGL库 ,这里说opencv依赖下载cvui2.70 优快云https://mp.youkuaiyun.com/mp_blog/creation/editor首先添加cvui.h文件到对应的文件中如果编译出现LNK2005 错误 就是重复定义 最好就是重新定义 不要实现。解决方法我是在VS2017上出现这个问题的,解决方法很粗暴,右键项目属性—>链接器—>命令行,底下的“其他...原创 2021-10-20 17:16:57 · 1190 阅读 · 0 评论 -
关于QT tree-widget控件的使用以及触发子节点事件!
1.在QT中除了UI设计控件,还可以代码插入控件,我们接下来讲的是代码写入原创 2021-09-30 21:16:26 · 1729 阅读 · 0 评论 -
基于C/C++的最简单的网络编程(Server and Client)传输图片,文本等
1.初始化网络库bool init_Socket();bool init_Socket(){ WSADATA wsadata; if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata)) // windows异步套接字 { printf("启动网络库失败 %d", WSAGetLastError()); return false; } return true;}2.创建服务器socketSOCKET create_s原创 2021-09-25 10:19:52 · 767 阅读 · 0 评论