C++
雲烟
可以卑微如尘土,不可扭曲如蛆虫。
展开
-
最大子列和O(N)
int MaxSubSeqSum(int a[], int n){ int ThisSum = 0, MaxSum = 0; for(int i=0; i<n; i++){ ThisSum += a[i]; if(ThisSum > MaxSum) MaxSum = ThisSum; else if(ThisSum < 0) ThisSum = 0; } ret.原创 2022-05-01 14:25:02 · 271 阅读 · 0 评论 -
json.hpp简单使用
json.hpp是一个非常强大的工具,只需要包含这个头文件,即可对json文件进行操作。Git地址:https://github.com/nlohmann/jsonGit上有简单的使用说明,简书这位作者已经将其汉化。详见:https://www.jianshu.com/p/69e57f2af904?tdsourcetag=s_pctim_aiomsg主要使用到了其中的打补丁的功能,将两个不同的json比较,先把不同的部分区分出来成为patch,然后打在指定的json中。#include原创 2020-07-24 14:07:18 · 8387 阅读 · 0 评论 -
泛型编程
STL(Standard Template Library)主要由两种组件构成:容器(container)和操作容器类的泛型算法(generic algorithm)。 容器包括:vector、list、set、map等。其中vector和list是熟悉容器。一次从第一个元素到最后一个。主要进行迭代(iterate)操作。map和set是关联容器。可以快速寻找容器中任意值。map由成对...原创 2020-03-04 17:54:45 · 126 阅读 · 0 评论 -
Qt中开启一次性任务
QTimer中封装有一个方法是若干时间之后执行一次,如下例子所示: QTimer::singleShot(3000, [](){ //要执行任务 qDebug("event"); });首先要包含#include<QTimer>头文件,然后调用方法singleShot,意思是3秒后执行b包内的内容一次。...原创 2019-10-10 15:05:29 · 729 阅读 · 0 评论 -
Qt中静态方法发送信号
背景:线程中开启了定时器,轮询传感器状态,传感器状态的获取是使用的静态方法,想要达到的效果是,一旦传感器满足阈值,就发送特定信号,界面类接收到这个信号后,实时显示弹窗(警告或提醒)。尝试过各种方法都不能奏效,最后验证此方法可行,connect函数写在ui的构造函数中,所以在此之前要完成信号的发射。首先,定义自己使用的定时器线程。#ifndef MY_THREAD_H#define MY...原创 2019-10-10 14:47:35 · 4453 阅读 · 1 评论 -
Qstring,string和char*转换
string转char * string temp ; char * tempc=temp.c_str(); string转QString string temp ; QString tempc = QString::fromStdString(temp); QString转String QString temp; String tempc = temp.toSt...原创 2019-09-02 22:43:46 · 335 阅读 · 0 评论 -
C++NEW、DELETE、VECTOR
动态内存分配new int 等价与malloc(sizeof(int)),没有初始值。 new int(5),将申请的Int大小的空间初始化为5。 Node为定义的结构体/类,Node * p = new Node;等价于Node *p = (Node *)malloc(sieof(Node));。 new int ,delete 。new [] , delete[]。#inclu...原创 2019-06-23 19:23:14 · 941 阅读 · 0 评论 -
C++引用、友元函数、运算符重载
引用和指针在底层汇编阶段没有任何区别,都是地址传递。 不同:指针可能出现地址乱指的问题,而引用则不会,改变引用的值实际上是改变变量地址上的值,而不是变量的地址。 引用是C++中特有类型。 引用类型只能赋值一次,不能重新赋值。 引用只是变量的一个别名。 引用可以理解成是编译器维护的一个指针,但并不占用空间。 使用引用可以像指针那样去访问、修改对象的内容,但更安全。void Print...原创 2019-06-23 11:07:27 · 508 阅读 · 0 评论 -
C++虚函数多态
通过声明对象Base base这种方式去调用virtual函数和调用普通函数没有任何的区别。#include<stdio.h>class Base{public: void Function_1() { printf("Function_1...\n"); } virtual void Function_2() { printf("Function_2....原创 2019-06-17 22:16:40 · 157 阅读 · 0 评论 -
C++动态绑定-多态
绑定: 绑定就是将函数调用与地址关联起来。普通的成员变量、成员函数、编译完的时候,调用地址就确定好的。 virtual函数的地址是不确定的,只是能确定虚表的地址,virtual函数有可能被重写。 只有virtual的函数是动态绑定。 动态绑定还有一个名字:多态。 常用场景:析构函数定义为虚函数。 (否则定义父类指针去访问子类,最后可能释放的是父类的空间而不是子类的空间...原创 2019-06-18 22:32:40 · 368 阅读 · 0 评论 -
C++权限
class和struct的唯一区别就是权限不一样。class默认的属性是private。 struct默认的属性是public。 事实上在内存存储上也没有区别,只是编译器给访问上进行了限制。 继承上有区别,struct默认public,继承后可以访问父类。class想要访问父类class的成员,必须首先将自己的成员都声明为public,并且继承时注明要public的方式继承(因为默认继承...原创 2019-06-18 23:35:07 · 265 阅读 · 0 评论 -
C++继承
继承:就是一种数据的复制。为什么要用继承:减少重复代码的编写。下面代码中,Person称为父类,或者基类。 Teacher.、Student称为子类,或者派生类。 Tercher t,t称为对象,或者实例。 可以使用父类的指针指向子类的对象(但仅仅能访问父类中定义过的数据类型,子类中新增的数据类型不能访问)。 反过来,使用子类的指针访问父类的对象是不允许的。 子类的构成实际上是先...原创 2019-06-15 19:13:05 · 346 阅读 · 0 评论 -
C++构造-析构函数
构造函数:与普通函数相比有三点不同。和定义的结构体/类名字完全一样。 没有返回值。 调用的时机:创建一个对象的时候,对结构体内的对象赋值,初始化用的。而成员函数print()是创建完对象再调用。 构造函数不是必须有的,但是一旦定义了构造函数,在创建对象的时候必须要用,否则报错。 如果即想有构造函数,创建对象的时候不想赋值,那么久再提供一个空的构造函数。 构造函数可以写多个,但是不能写...原创 2019-06-15 17:17:33 · 954 阅读 · 0 评论 -
C++模板
模板的作用是解决不同类型,处理代码的重复编写,比如适用 int 类型编写了一个冒泡排序,那么这个方法只能对 Int 类型进行排序,如果想要对 char 、double 等类型同样进行冒泡排序呢,没有模板就需要重复编写多次。而使用模板则只需要替换类型即可。#include<stdio.h>#include<malloc.h>template<class T...原创 2019-06-20 22:20:44 · 463 阅读 · 0 评论 -
C++类this指针
面向过程的语言和面向对象的语言最本质的三个区别:封装。 继承。 多态。c++能做的事情,c都可以做,为什么要用c++,是因为熟悉c++语法,编译器会替我们做很多事情,方便,节省很多时间。封装:把函数扔到结构体就是封装。 为什么要封装:封装后使用结构体内的参数比较方便。类:结构体就是一个类,和结构体大同小异。对象:使用结构体/类创建一个变量 class Base{}; Ba...原创 2019-06-15 13:51:59 · 416 阅读 · 0 评论 -
模板使用
1.模板在函数中使用:此冒泡排序限定了只能用int,需要排不同类型写多次吗?函数重载,模板。//基本冒泡排序模板template <class SORT>//void sort(int* arr,int length)void sort(SORT arr,int length){ for(int i=0;i<length-1;i++) { for(int...原创 2019-03-17 11:46:19 · 107 阅读 · 0 评论 -
C++概念
1.using声明不仅仅可以针对命名空间中的一个变量,也可以声明整个命名空间。using声明后,未出现指定,默认采取之前命名空间。2.cin、cout、cerr不是C++中的关键字,本质是函数调用,它们的实现采用的是C++运算符重载。其中,cout是带有缓冲的,而cerr则不带缓冲。3.endl换行输出可以用‘\n’替代。4.输入操作符>>在读入下一个输入项前会忽略前一项后...原创 2018-09-07 17:40:51 · 214 阅读 · 0 评论 -
字符串成员函数
istream中的类提供了成员函数: cin.getline(arrayname,number)读取整行,通过回车输入的换行符确定输入结尾。丢弃换行符。 cin.getline(a,20):将20个元素读入到a数组中。 cin.get(arrayname,number)将换行符保留在输入序列。相比getline,get更仔细一些,一般使用cin.get()。 ...原创 2018-09-10 18:23:18 · 387 阅读 · 0 评论 -
C++cout.setf(ios_base::fixed,ios_base::floatfield)
cout.setf(ios_base::fixed,ios_base::floatfield)如果编译器无法通过,则将ios_base换作ios即可。ios_base::fixed作用: 设置cout为定点输出格式ios_base::floatfield作用: 设置输出时按浮点格式,小数点后有6位数字...原创 2018-09-10 16:23:35 · 6663 阅读 · 5 评论