C++
wD丶路人
稳步前进
展开
-
C++中编写自己的头文件
自己写的头文件需要用“”引用标准的头文件要用<>引用头文件只能写声明,不能写定义!!!,但是可以写const的定义。头文件主要包括:(和源文件相对应)1.类的声明(类的定义和声明是一样的)2.外部变量的声明要写extern int a;不能写成int a;3.函数的声明源文件主要包括:1.外部变量的定义2.函数的定义程序的运行过程编辑(写源代码)->预处理...原创 2019-04-01 16:52:40 · 8732 阅读 · 0 评论 -
C++学习笔记:switch语句
switch语句在多个判断条件的时候可以代替if语句下面举个例子来展示两者的区别和各自的优势if语句的实现int main(){ int i; cout << "请输入今天是星期几:"; cin >> i; if(i==1) cout << "今天是星期1"<<endl; else if(i==2) cout <<...原创 2019-05-04 17:07:16 · 2278 阅读 · 0 评论 -
C++学习笔记:类的定义
类可以说是C++的精髓所在!首先学习如何定义一个类:一个类的内部可以有成员也可以没有成员,当然啦,没有成员的类没有什么用处1.类的成员成员分数据成员和函数成员每个成员共有三种类型的区分,被称之为“访问标号”:private、public、protected一般定义的时候,数据成员被定义为私有的,函数成员定义成公有的。protected在继承的时候会用到。如果没有写标号,就默认是私有的成员...原创 2019-05-04 18:04:03 · 1754 阅读 · 0 评论 -
LeetCode : 206.反转链表
本题注意以下几点:1.我的是方法是逐个遍历每个节点,将上一个节点的地址赋值给当前节点的next中,因此每次循环遍历需要保存当前和上一个节点的地址,需要注意的是头结点head的尾部节点的处理!,头结点的next变成NULL,把尾部节点的地址赋给head。2.注意不要试图使用空指针,判断条件中必须设置好不要使得出现空指针的条件3.警告视为错误,非void函数必须返回值;ListNode* re...原创 2019-04-24 20:00:52 · 1369 阅读 · 0 评论 -
leetcode 237.删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:这道题特别巧妙,和我们平时解题的思路不一样,给我们的这个node就是链表的一部分,直接在上面操作就可以了,不要纠结为什么没有head。刚开始因为没有head二纠结了好久,还特别傻的自己强行写了一个链表出来,用传统的方法去删除节点。其实根本不...原创 2019-04-24 20:01:58 · 1328 阅读 · 0 评论 -
Leetcode刷题笔记: 66. 加一
题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。...原创 2019-05-06 22:03:04 · 1563 阅读 · 0 评论 -
C++学习笔记:变量的引用
对于习惯使用C语言的同学们,在看到c++中出现的&符号,因为在C语言中这个符号表示了取地址符,因此就会出现困惑,但是在C++中它却有着不同的用途, C++中称之为引用。今天给大家一个关于引用的清晰明了的认识。一、什么是变量的引用?:引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;例如:int b...原创 2019-05-20 22:26:08 · 1795 阅读 · 0 评论 -
C++学习笔记:函数的参数传递---引用形参
函数的引用形参只在C++语言中有,C语言是没有的之前我将了关于函数的非引用形参C++学习笔记:函数的参数传递之非引用形参,非引用形参即为复制形参,非引用形参是不能改变实际传入的实参的值,除非是用指针形参。关于什么是变量的引用,之前的博客我也讲过C++学习笔记:变量的引用而今天学习的引用形参是可以直接改变实际实参的值。如下例子#include<iostream>#includ...原创 2019-05-20 23:55:15 · 1547 阅读 · 0 评论 -
C++学习笔记:类的成员函数的声明与定义
今天学习一下类的成员函数,首先讲一下常规的类外的函数写在类的外部的函数叫做全局函数,不属于任何的类。如果写在类的里面就叫做类的成员函数int sum(int x, int y)//写在类的外部{ return x + y;}class Sales_item{public: std::string isbn;//书号 unsigned units_sold;//数量 do...原创 2019-05-11 16:07:40 · 10747 阅读 · 0 评论 -
C++学习笔记:类的构造函数
之前我讲了一下关于类的成员函数相关的内容C++学习笔记:类的成员函数的声明与定义今天学习的类的构造函数是一种特殊的成员函数!构造函数是用于给类的数据成员进行初始化的!类的构造函数定义和声明的时候需要注意的几点是:①构造函数的名字必须和类的名字一模一样②构造函数没有任何返回值③构造函数的内部可以是空的,但是必须使用初始化列表为所需要初始化的类数据成员进行初始化。当所需要进行初始化的成员...原创 2019-05-11 18:16:07 · 1376 阅读 · 0 评论 -
C++学习笔记:函数的重载
函数的重载只在C++语言中有,C语言是没有的!!一、所谓的函数的重载就是:出现在相同作用域的两个函数,名字相同,但形参不同。重载函数的好处是:不用费心给每一个函数起名字在调用的时候C++会智能地分辨各个函数的形参的不同void show(int x)//形参是int{ cout << x << endl;}void show(vector<int&g...原创 2019-05-11 21:08:24 · 1449 阅读 · 0 评论 -
C++学习笔记:函数的重载与作用域
之前我讲了函数的重载相关的知识C++学习笔记:函数的重载今天将以下关于重载的作用域一般情况下,每一个版本的函数重载都应该在同一个作用域中声明但是有种情况是:如果其中一个函数的声明做了一个局部的声明,那么这种情况就叫做‘函数屏蔽’,而不是函数的重载!!在讲函数屏蔽(函数隐藏)之前,我们先来看一下变量屏蔽如下例所示:#include<iostream>#include<...原创 2019-05-11 23:28:10 · 2725 阅读 · 0 评论 -
C++学习笔记:函数匹配(重载确定)
所谓函数匹配,就是去从一个函数重载集合中调用一个想要调用的重载函数,这种调用有三种可能性:①C++在重载集中找到了所要调用的重载函数,既形参相匹配的那个函数②C++没有找到形参相匹配的函数,这时C++会报错③C++找到了多个相匹配的重载函数,这时C++也会报错,称之为二义性错误下面通过一个小例子讲解一下重载确定的三个步骤:1)候选函数(和所调用的函数的函数命名相同的那些函数就是候选函数...原创 2019-05-12 11:59:51 · 1905 阅读 · 0 评论 -
C++学习笔记:函数的参数传递之非引用形参
非信用形参包括:1)普通形参①非const形参②const形参2)指针形参①非const指针形参②const指针形参一、下面的例子说明了非引用形参的传参实例!#include<iostream>#include<string>#include<stdlib.h>#include<vector>using namespace s...原创 2019-05-12 14:33:40 · 1659 阅读 · 0 评论 -
QT学习笔记1:第一个QT项目的创建
今天起开始学习有关QT的内容,QT是一个跨平台的C++图形用户界面应用程序框架,后期做码流分析软件用的,本来想用MFC,看雷神的码流分析软件使用MFC做的,但是周围人力荐QT,而且QT开发简单一些,所以就先学一下QT吧。下面介绍一下如何创建一个QT项目:第一步:点击新建第二步:选择模板,按红圈选择就行,然后点击“Choose”第三步:创建项目名称和项目路径,然后点击“下一步”项目名称...原创 2019-07-29 15:21:05 · 794 阅读 · 0 评论 -
QT学习笔记2:最基本的QT程序中.pro文件以及源文件解析
一、.pro文件的解析#-------------------------------------------------## Project created by QtCreator 2019-07-29T14:40:51##-------------------------------------------------QT += core gui#QT所包含的基本模...原创 2019-07-29 16:31:22 · 287 阅读 · 0 评论 -
QT学习笔记3:QT中基本控件的接口(QPushButton的简单实用)
在自己定义的QWidget基类的对象MyWidget(最外层的大窗口)中设置按钮: 1.定义一个按钮对象,QPushButton *btn =new QPushButton; 2.show函数:该函数的作用就是让窗口弹出,btn->show()则是让按钮用顶层的方式弹出窗口 3.setParent函数:为按钮设置一个可以依赖的父窗口,使得按钮可以显示在父窗口中,而不是独立作为一个...原创 2019-07-29 16:56:23 · 1014 阅读 · 0 评论 -
QT学习笔记4:Qt中对象树的概念
关于Qt中对象树的概念可以用下图来表示关于对象树的几点需要学习和注意的地方是:①在创建对象的时候,如果父类是QObject或者QObject派生的类,则这个对象可以不用去管理释放,系统会将该对象放到一个对象树上,析构会自动管理对象的释放②对象构造的顺序和释放顺序是相反的,构造的顺序是从树的根节点往下构造,而释放则是从叶节点的控件对象逐步向上释放(就比如,点击整个APP的右上角的“×”按钮,...原创 2019-07-29 17:58:54 · 658 阅读 · 0 评论 -
Leetcode刷题笔记: 26. 删除排序数组中的重复项
这道题刚开始我被绕进去了,其实很简单。在系统学了有序向量的唯一化操作后思路就很清晰了,之前对于有序向量的唯一化操作有过详细的讲解,这里我直接给出链接数据结构学习笔记:有序向量的唯一化(去重复)操作下面是这道题的代码实现(C++实现):执行用时 : 32 ms, 在Remove Duplicates from Sorted Array的C++提交中击败了96.72% 的用户内存消耗 : 10....原创 2019-05-04 16:12:04 · 1720 阅读 · 0 评论 -
数据结构学习笔记:有序向量的唯一化(去重复)操作
有序性及其甄别有序向量的唯一化(去重复)操作int nuiquify()(低效率版)我们来分析一下上述低效算法的复杂度接下来学习一下高效率的有序向量的唯一化(去重复)操作!!!...原创 2019-05-04 15:30:25 · 1928 阅读 · 0 评论 -
C++学习笔记:C++中的vector容器
vector是一个动态数组,数组大小是可以变的,相对于传统数组灵活很多vector是一个类模板<>需要注意的是vector对象使用的时候不能给下表添加任何元素既不能对一个空向量进行下表操作****C++中的vector容器...原创 2019-04-01 16:57:44 · 1505 阅读 · 0 评论 -
C++标准模板库中的迭代器
一般vector对象的操作可以使用下标来进行操作,但是最好使用迭代器进行操作,所有的容器都可以使用迭代器进行操作,但不是所有的容器都像vector一样可以进行下标的操作!!!运行结果如下:需要注意的是!!,常迭代器不能对数据进行修改...原创 2019-04-25 22:02:11 · 1644 阅读 · 0 评论 -
C++标准库的bitset类型
C++ 中的bitset是可以直接对二进制数据进行处理操作的类型bitset对象定义的时候可以用整形也可以用字符串类型进行定义!!bitset类型可以用类似数组的下标进行操作!!!!以下是一些bitset类型一些常用的操作bitset类型可以直接进行位操作,而且未操作的注意!!bitset类型声明的时候大小就固定了,不能再改变...原创 2019-04-25 22:07:37 · 1405 阅读 · 0 评论 -
C++标准库中的sort函数
sort函数是用于C++中,对给定区间所有元素进行排序的一个很重要的函数。必须包含的头文件是#include 和using namespace std;重头戏来啦!!!sort函数的用法(C++排序库函数的调用)对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。(一)为什么要用c++标准库里的排序函数?Sort()函数是c++一种排序方法之一,学会了这...原创 2019-04-25 22:16:08 · 8245 阅读 · 0 评论 -
数据结构学习笔记:1.1计算机与计算
(a)计算对象:计算的规律和技巧目标:实现高效低耗的计算1.什么是计算机和计算2.到底什么是一个好的算法呢?效率才是一个好算法的关键!!!数据结构+算法=计算3.算法分析的两个方面问题规模VS计算成本...原创 2019-04-27 14:27:41 · 1409 阅读 · 0 评论 -
数据结构学习笔记:图灵机(TM)和RAM
TM和RAM是一种独立的具体的平台,具有无限的内存,对算法效率的评判比较可信原创 2019-04-27 14:39:25 · 3281 阅读 · 0 评论 -
数据结构学习笔记:算法复杂度的分析
为了理解算法复杂度的分析,首先讲一下级数方面的知识和归纳接下来看一下循环操作中的级数!原创 2019-04-27 16:31:03 · 1494 阅读 · 0 评论 -
数据结构学习笔记:冒泡排序复杂度分析
通过冒泡排序来验证一个算法是有效的,什么情况下该算法必然会结束?至少需要迭代多少趟?原创 2019-04-27 17:15:48 · 1494 阅读 · 0 评论 -
数据结构学习笔记:封底估算
之前介绍的大O记号法模糊定性地去估算一个算法的复杂度之外数据结构学习笔记:算法复杂度的度量之“大O记号”还有一种可以精细定量地估计算法复杂度的方法之一就是封底估算!!这种估算几乎不需要比较,只需要用头脑去抓住问题的主要方面尽快的得出一个问题的足够近似的估计拿下面简单的例子来说明,同一个算法在不同硬件机器上的复杂度的封底的时间估计和不同的算法在同一硬件上的时间。...原创 2019-04-27 17:46:33 · 2393 阅读 · 0 评论 -
数据结构学习笔记:迭代与递归之“减而治之”
我们刚开始学习算法的时候,通常都用笨重的迭代方法去求解,但是一般的迭代算法效率很低,因此出现了递归这样效率更高更巧妙的方法。下面我们举个例子来看我们可以从代码里看出,整个问题的规模不断在减少,最后直到退出循环体,这就是减而治之的方法体现接下来举一个减而治之的递归算法的例子,以及分析递归算法复杂度的方法数组求和:线性递归我们再来看另一个典型应用的递归实例数组倒置:...原创 2019-04-28 14:25:48 · 1503 阅读 · 0 评论 -
数据结构学习笔记:另一种强有力的算法策略“分而治之”
之前已经讲过一种有效的算法策略减而治之数据结构学习笔记:迭代与递归之“减而治之”今天再讲另一种强有力的算法策略“分而治之”两种策略颇为类似,但又有所不同下面举一个具体的实例数组求和:二分递归从上面的例子可以看出,貌似用减而治之和分而治之的策略对于同一个问题的复杂度是一样的,很多人可能就开始疑问了,既然是一样的,那还何必发明出两种策略呢?其实不然,上面的例子只是一个很简单的例子,所以看不...原创 2019-04-28 14:50:25 · 1531 阅读 · 0 评论 -
数据结构学习笔记:关于DSC设计与优化的设计与优化---动态规划
一个好的算法需要满足三个条件:(1)算法可以正常工作(2)算法的正确性可以得以保证(3)算法要能足够快一般的递归算法确实能很好的满足前两个条件,但是或许它并不够快,甚至有些问题在递归算法下导致内存和程序的崩溃,就是因为计算的太慢了,这时我们可以用迭代算法,虽然之前讲过递归算法比迭代更有效率,但是在某些问题的情况下,迭代算法是比递归更加有效的,不容易导致崩溃!下面举个实例看一下:斐波那锲...原创 2019-04-28 15:30:40 · 1691 阅读 · 0 评论 -
数据结构学习笔记:向量之接口与实现
向量vector属于一种线性数据结构首先要清楚抽象数据类型(ADT)和数据结构的区别:而向量这种结构就属于一种抽象数据类型,简称向量ADT,是数组的进化,是一种动态数组!!下面是vector数据结构类型的一些操作接口以及这些向量接口的操作实例...原创 2019-04-28 16:11:15 · 1677 阅读 · 0 评论 -
C++标准库中的String类型
一、string类型的基本操作string 是对C语言中的改进接下来看一下怎么手动读入一个字符串的操作int main(){ string s; cin >> s;//这样读入字符串是有局限的,遇到空白字符就停止读入了, //因此只能读一个单词 //但是他会把开头遇到的所有空白字符忽略//那要是想要完整的读入一行字符串...原创 2019-04-28 17:42:20 · 1532 阅读 · 0 评论 -
数据结构学习笔记:向量的构造和析构
一个模板类的构造:基于复制的类模板的构造:原创 2019-05-04 12:07:48 · 1635 阅读 · 0 评论 -
数据结构学习笔记:向量之可扩充向量
静态空间管理以及其不足:动态空间管理:扩充算法的实现:下面来看看其他扩充的策略:1.容量递增策略:1.容量加倍策略(指数级别):递增策略和加倍策略的对比如下:可以看出加倍策略在牺牲一定量空间复杂度的代价下换取了大量时间复杂度的增益,这样是值得的平均复杂度VS分摊复杂度...原创 2019-05-04 13:48:22 · 1905 阅读 · 0 评论 -
数据结构学习笔记:无序向量常用的操作算法
向量的元素访问向量的插入算法:insert(r,e)r位置上插入一个元素e向量的区间删除算法:remove(lo,hi)删除lo到hi地址之间的所有元素向量的查找算法:find(e,lo,hi),逆向的逐个从hi向lo遍历其间所有元素,查找是否有和元素e相等的元素,最终返回的是查找到的元素的位置;如果到lo还没有找到相等的元素,则查找失败向量的单元素删除算法:remove(r)删除...原创 2019-05-04 15:06:17 · 1894 阅读 · 0 评论 -
用移位表示除法的“四舍五入”思想
一般写工程量比较大的代码,如果有除法运算,则必须考虑到除法“/”和乘法"*"复杂度的问题,乘法除法复杂度都是比较高的,如果较多的使用这两个运算符无疑会导致算法复杂度上增加。因此就必须采用某种方法代替一般的乘除法。对于乘法除法,最简单的就是尽量使用移位操作代替乘除法。比如下面的例子:求3*4:3<<2;求6除以4:6>>2;移位操作符“>>”指右移,右移1...原创 2019-09-20 20:15:00 · 3557 阅读 · 4 评论