C++
GoKu~
学无止境.
展开
-
单例例模式的懒汉模式和饿汉模式使用场景
如果系统资源较为紧张,或者单例对象初始化较为耗时,可以考虑使用懒汉模式,实现延迟加载,避免一开始就占用资源。1. 占用内存,因为实例在类加载时就创建并占用内存空间,如果实例化后长时间不使用,会浪费内存。- 如果单例对象的创建和初始化比较简单且对资源要求不高,可以选择饿汉模式,简化实现并确保线程安全。2. 实现起来相对复杂,需要考虑线程安全性,可能需要使用双重检查锁等机制,增加了代码复杂度。1. 线程安全,因为实例在类加载时就被创建,不存在多线程竞争的问题。原创 2024-07-11 17:52:56 · 283 阅读 · 0 评论 -
lib库接口设计的注意事项
综上所述,设计一个优秀的库需要综合考虑功能性、性能、安全性、可靠性和用户友好性等多个方面,以确保库能够满足用户的需求并具备良好的使用体验。- 良好的文档:提供详细的文档,包括函数用途、参数、返回值和示例,以便用户能快速上手和理解库的功能。- 平台无关性:考虑库在不同操作系统和硬件平台上的可移植性,避免使用平台特定的功能和API。- 健壮性:处理可能的错误和异常情况,提供良好的错误消息和反馈,以便用户能够诊断和解决问题。- 版本控制:采用适当的版本控制策略,管理库的更新和发布,确保向后兼容性和升级路径清晰。原创 2024-07-11 15:49:33 · 225 阅读 · 0 评论 -
C++ 函数模板实例二
模板函数实例二原创 2022-06-05 11:37:33 · 122 阅读 · 0 评论 -
QT XML操作实例
QT XML操作实例原创 2022-06-04 17:14:39 · 576 阅读 · 0 评论 -
QT 文件读写及信息打印
QT 文件读写及信息打印原创 2022-06-03 16:48:34 · 701 阅读 · 0 评论 -
C++ List中的排序使用实例
#include <iostream>#include <string>#include <list>#include <algorithm>using namespace std;class Person{public: Person(string name,int age,int height){ m_name = name; m_age = age; m_height = hei.原创 2022-05-06 17:16:50 · 1181 阅读 · 0 评论 -
C++ List详细使用实例
#include <iostream>#include <list>/*push_back(elem);/在容器尾部加入一个元素pop_back();/删除容器中最后一个元素push_front(elem);/在容器开头插入一个元素pop_front0;/从容器开头移除第一个元素insert(pos,elem);/在pos位置插elem元素的拷贝,返回新数据的位置。insert(pos,n,elem);/在pos位置插入n个elem数据,无返回值。insert(p.原创 2022-05-06 16:14:39 · 485 阅读 · 0 评论 -
C++ 多态实例二
描述:创建一个生成电脑零部件的纯虚函数,让各个厂商品牌去生产这些零部件(也就是具体去实现基类的方法),再通过一个电脑类去实现各个零件的组装,完成一个完整电脑的配置,其中一台电脑的零件可以来自不同厂商。#include <iostream>using namespace std;///抽象类class Cpu{public: virtual void calculator() = 0;};class VideoCard{public: virtual.原创 2022-05-05 18:02:20 · 377 阅读 · 0 评论 -
C++ 多态在子类中申请堆内存需注意这一点
#include <iostream>#include <string>using namespace std;class Animal{ public: virtual void speaking() { cout<<"动物在叫"<<endl; } Animal(){ cout<<"Animal 构造函数"&l.原创 2022-05-04 18:49:23 · 396 阅读 · 0 评论 -
C++ 多态实例一
#include <iostream>using namespace std;class AbstractDrinking{ public: //煮水 virtual void boilWater() = 0; //冲泡 virtual void brewing() = 0; //倒入杯子中 virtual void PourIntoUp() = 0; //加入辅料.原创 2022-05-04 17:55:13 · 594 阅读 · 0 评论 -
使用深拷贝来解决浅拷贝出现的问题
描述:系统提供默认的拷贝构造器,一经定义不再提供。但系统提供的默认拷贝 构造器是 等位拷贝,也就是通常意义上的浅拷贝。如果类中包含的数据元素全 部在栈上,浅拷贝 也可以满足需求的。但如果堆上的数据,则会发生多次析构行 为。 #include <iostream>using namespace std;class Persion{private:public: Persion(){ cout<<"默认构造函数"<&l原创 2022-05-03 22:03:27 · 395 阅读 · 0 评论 -
QT 简单操作数据库实例
描述:通过编写界面窗口,对数据库进行增删改查一系列操作。#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QSqlTableModel>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{ Q_OBJECTpublic: Widget原创 2022-05-02 18:20:32 · 1330 阅读 · 0 评论 -
QT C++ model 的使用实例
描述:在QML中,当需要少量数据时,QML中直接定义模型时非常方便。当数据较为复杂或者想在c++里操纵数据时,可以在C++中自定义自己的Model并在qml中展示数据,这样会更加稳定可靠而且避免卡顿现象。main.cpp#include <QGuiApplication>#include <QQmlApplicationEngine>#include "MyListModel.h"#include <QQmlContext>int main(in原创 2022-04-29 21:39:50 · 1191 阅读 · 0 评论 -
QT qml中的Canvas画布使用例子
描述:实现按钮点击自动填充整个进度条或者随时间逐步填充,填充过程中不会出现超出的问题,类似于手机的亮度调节。import QtQuick 2.12import QtQuick.Window 2.2import QtQml 2.12import QtQuick.Controls 2.12Window { id:_widget visible: true width: 1280 height: 720 property int num: 50原创 2022-04-26 21:41:22 · 898 阅读 · 0 评论 -
QT多线程应用实例二(方法3)
描述:使用qt自带线程池方法处理任务,提高资源利用率。1,修改继承的父类,将线程放到线程池中,去处理到来的任务。界面:#ifndef WIDGET_H#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{ Q_OBJECTpublic: W..原创 2022-04-22 22:12:04 · 444 阅读 · 0 评论 -
QT多线程应用实例二(方法 2)
在创建派生类对象,构造函数的执行顺序()正确答案: AA 基类构造函数,派生类对象成员构造函数,派生类本身的构造函数B 派生类本身的构造函数,基类构造函数,对象成员构造函数C 基类构造函数,派生类本身的构造函数,派生类对象成员构造函数D 对象成员构造函数,基类构造函数,派生类本身的构造函数对象创建时代码的加载顺序为:静态代码 --> 非静态代码 --> 构造方法。若继承了父类,则加载顺序为:父类的静态的代码 --> 子类的静态的代码 --> 父类内部非静态代原创 2022-04-22 21:09:18 · 479 阅读 · 0 评论 -
Qt 多线程应用实例二(方法 1)
描述:创建三个线程,一个产生随机数,一个调用冒泡算法对随机数进行排序,一个调用快速排序算法排序并输出结果及打印三个线程处理任务的各自耗时时间。Widget(h/cpp):#ifndef WIDGET_H#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACEnamespace Ui { class Widget; }QT_END_NAMESPACEclass Widget : public QWidget{ Q原创 2022-04-22 16:32:35 · 1135 阅读 · 0 评论 -
QT 多线程使用简单实例
操作:创建多个线程对数据进行排序处理,重写Run方法界面:(h/cpp)#ifndef THREADDLG_H#define THREADDLG_H#include <QDialog>#include <QPushButton>#include "workthread.h"#define MAXSIZE 5 //MAXSIZE宏定义了线程的数目class ThreadDlg : public QDialog{ Q_OBJECTp.原创 2022-04-22 10:18:04 · 1505 阅读 · 1 评论 -
QT 事件过滤器实例
作用:主要可以拦截事件,过滤掉多个相同事件响应,避免处理冗余。事件过滤器的操作: 首先给需要添加事件过滤器的部件注册监听对象;对象名->installEventFilter(true); 重写eventFilter(QObject *obj, QEvent *event)函数进行处理。 头文件:#ifndef EVENTFILTER_H#define EVENTFILTER_H#include <QDialog>#include <QLabe原创 2022-04-21 17:08:06 · 858 阅读 · 0 评论 -
QT布局管理复习
头文件:#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QLayout>#include <QLineEdit>#include <QPushButton>#include <QCheckBox>#include <QLabel>#include <QVBoxLayout>#include <QHBoxLayout>.原创 2022-04-20 17:31:14 · 396 阅读 · 0 评论 -
QTabelWidget实例
1 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步.原创 2022-04-17 21:37:46 · 407 阅读 · 0 评论 -
线程池的学习
#include <memory>#include <iostream>#include <thread>#include <vector>#include <functional>//两个类:一个创建线程一个用容器来存储线程作为线程池class Thread {public: using threadFun = std::function<void()>; Thread(threadFun fun..原创 2022-04-08 14:29:35 · 107 阅读 · 0 评论 -
详解URL的组成
下面这个URL为例,介绍下普通URL的各部分组成http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name从上面的URL可以看出,一个完整的URL包括以下几部分:1、协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符2、域名部分:该..转载 2022-03-19 17:06:34 · 12895 阅读 · 0 评论 -
C++11中,对于deleted函数
C++11中,对于deleted函数,编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性。对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成员函数的时候,编译器会隐式的自动生成一个默认的特殊成员函数,比如默认的构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。为了能够让程序员显式的禁用某个函数,C++11标准引入了一个新特性:deleted函数。程序员只需在函数声明后加上”=delete;”,就可将该函数禁用。deleted函数特性还可原创 2022-02-21 17:39:03 · 788 阅读 · 0 评论 -
C++ 的 try/catch/throw
首先通过一个简单的例子来熟悉C++ 的 try/catch/throw(可根据单步调试来熟悉,try catch throw部分是如何运行的):复制代码#include <stdlib.h>#include "iostream"using namespace std;double fuc(double x, double y) //定义函数{ if(y==0) { throw y; .转载 2022-03-14 14:18:23 · 249 阅读 · 0 评论 -
回调函数实战
#include <iostream>using namespace std;int add(int a,int b){ return a+b;}int diff(int a,int b){ return a-b;}int comm_func(int(*func_p)(int,int),int a,int b){ return func_p(a,b);}int my_func(int x,int y){ return 3*x + 5*.原创 2022-02-27 22:24:40 · 90 阅读 · 0 评论 -
第 3 章 语言运行期的强化
3.1 Lambda 表达式Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性, 而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。这样的场景其实有很多很多, 所以匿名函数几乎是现代编程语言的标配。基础Lambda 表达式的基本语法如下: [捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 {// 函数体} 上面的语法规则除了[捕获列表...原创 2022-02-21 18:16:06 · 90 阅读 · 0 评论 -
ListView(headerView,footerView)
ListView 用来显示一个条目列表,条目对应的数据来自于 Model,而每个条目的外观则由Delegate 决定。我们可以将Delegate 看成如何展示 Item 的一个模板。Android手机上常见的联系人界面,其实就是使用 ListView 实现的,而且 Android 的 ListView 和 Qt Quick 的ListView 使用同样的模式:Model、View、Item Template(Delegate)。要使用 ListView,必须为其指定一个Model、一个Delega.原创 2022-02-21 10:07:58 · 1820 阅读 · 0 评论 -
函数指针及回调函数
1.函数指针既是指向一个函数的指针;2.可以通过这个指针调用许多功能函数,而这个被调用的含函数既是回调函数。#include <iostream>using namespace std;//函数指针及回调函数int Max(int a,int b){ return a>b?a:b;}int Min(int a,int b){ return a<b?a:b;}int comm_func(int(*func_p)(int,int),int a原创 2022-02-21 09:21:45 · 382 阅读 · 0 评论 -
c++11 noexcept
9.2 noexcept 的修饰和操作C++ 相比于 C 的一大优势就在于 C++ 本身就定义了一套完整的异常处理机制。 然而在 C++11 之前,几乎没有人去使用在函数名后书写异常声明表达式, 从 C++11 开始,这套机制被弃用,所以我们不去讨论也不去介绍以前这套机制是如何工作如何使用, 你更不应该主动去了解它。C++11 将异常的声明简化为以下两种情况:函数可能抛出任何异常 函数不能抛出任何异常并使用noexcept对这两种行为进行限制,例如: void may_thr..原创 2022-02-19 13:37:49 · 256 阅读 · 0 评论 -
typedef用法
1.常规变量类型定义例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 uchar c声明等于unsigned char c声明2.数组类型定义例如:typedef int array[2];描述:array等价于 int [2]定义; array a声明等价于int a[2]声明扩展:typedef int array[M][N];描述:array等价于 int [M][N]定义;...转载 2022-01-15 13:57:48 · 268 阅读 · 0 评论 -
QML---槽函数(添加 js文件)
import QtQuick 2.9import QtQuick.Window 2.2import QtQuick.Controls 2.2import './myJs.js' as Js //导入js文件Window { visible: true width: 640 height: 480 title: qsTr("myJs") Button{ text: "click" onClicked: { .原创 2021-12-12 11:16:22 · 384 阅读 · 0 评论 -
QT QML学习---槽函数
import QtQuick 2.9import QtQuick.Window 2.2import QtQuick.Controls 2.2Window { visible: true width: 640 height: 480 title: qsTr("Hello World") Button{ text: "click" function add(a, b){ return a+b; .原创 2021-12-12 10:18:49 · 342 阅读 · 0 评论 -
qml的focus问题
这是应用中令人头痛的焦点问题。如果没有焦点项,键事件就不能被处理,它就不能在一个屏幕中做任何事情——应用程序会挂起!! 基本上,qml中的基本元素是“item”。item有两个属性,焦点和活动焦点。activeFocus是只读的,当将焦点设置为一个项目或不设置焦点时,可以使用focus属性。注意,当将当前元素的属性焦点设置为false时,系统不能将焦点设置为其他项(哈哈,现在应用程序有机会挂起了!!)。通常我们只调用element。专注= true。此外,有一个有用的方法可以直接设置...原创 2021-11-30 17:05:44 · 5720 阅读 · 0 评论 -
给植物浇水
5201. 给植物浇水难度中等0你打算用一个水罐给花园里的n株植物浇水。植物排成一行,从左到右进行标记,编号从0到n - 1。其中,第i株植物的位置是x = i。x = -1处有一条河,你可以在那里重新灌满你的水罐。每一株植物都需要浇特定量的水。你将会按下面描述的方式完成浇水:按从左到右的顺序给植物浇水。 在给当前植物浇完水之后,如果你没有足够的水完全浇灌下一株植物,那么你就需要返回河边重新装满水罐。 你不能提前重新灌满水罐。最初,你在河边(也就是,x =...原创 2021-11-21 16:16:35 · 205 阅读 · 0 评论 -
反转偶数长度组的节点
2074.反转偶数长度组的节点给你一个链表的头节点head。链表中的节点按顺序划分成若干非空组,这些非空组的长度构成一个自然数序列(1, 2, 3, 4, ...)。一个组的长度就是组中分配到的节点数目。换句话说:节点1分配给第一组 节点2和3分配给第二组 节点4、5和6分配给第三组,以此类推注意,最后一组的长度可能小于或者等于1 + 倒数第二组的长度。反转每个偶数长度组中的节点,并返回修改后链表的头节点head。示例 1:...原创 2021-11-17 21:40:23 · 110 阅读 · 0 评论 -
5914. 值相等的最小索引
5914. 值相等的最小索引给你一个下标从 0 开始的整数数组nums,返回nums中满足i mod 10 == nums[i]的最小下标i;如果不存在这样的下标,返回-1。x mod y表示x除以y的余数。class Solution {public: int smallestEqual(vector<int>& nums) { int len = nums.size(); int Min = I...原创 2021-10-31 20:21:46 · 224 阅读 · 0 评论 -
5915. 找出临界点之间的最小和最大距离
5915. 找出临界点之间的最小和最大距离链表中的临界点定义为一个局部极大值点或局部极小值点 。如果当前节点的值严格大于前一个节点和后一个节点,那么这个节点就是一个 局部极大值点。如果当前节点的值严格小于前一个节点和后一个节点,那么这个节点就是一个 局部极小值点。注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个局部极大值点 / 极小值点。给你一个链表head,返回一个长度为 2 的数组[minDistance, maxDistanc...原创 2021-10-31 20:19:21 · 121 阅读 · 0 评论 -
间隔删除链表结点
给你一个链表的头结点head,每隔一个结点删除另一个结点(要求保留头结点)。请返回最终链表的头结点。示例 1:输入:head = [1,2,3,4]输出:[1,3]解释:蓝色结点为删除的结点示例 2:输入:head = [5,1,8,6,1]输出:[5,8,1]/** * Definition for singly-linked list. * struct ListNode { * int val; * ListN...原创 2021-10-29 20:53:33 · 217 阅读 · 1 评论 -
202. 快乐数
202. 快乐数编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。 如果可以变为 1,那么这个数就是快乐数。如果n是快乐数就返回true;不是,则返回false。方法:哈希表class Solution {public: int getNum(int n){//取各个位上的单数平方之和 i...原创 2021-10-28 22:38:57 · 77 阅读 · 0 评论