![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 65
OH,CGWLMXUP
这个作者很懒,什么都没留下…
展开
-
数据结构堆(Heap)详解-堆的建立、插入、删除、最大堆、最小堆、堆排序等
基本概念:1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。2、满二叉树:满二叉树是一种特殊的的完全二叉树,所有层的结点都是最大值。什么是堆?堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; ...原创 2019-12-13 11:08:23 · 47007 阅读 · 10 评论 -
算法LeetCode解题(C++)-18. 合并两个有序链表(难度:简单)
题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4具体思想就是新建一个链表,然后比较两个链表中的元素值,把较小的那个链到新链表中,由于两个输入链表的长度可能不同,所以最终会有一个链表先完成插入...原创 2019-11-08 19:40:00 · 171 阅读 · 0 评论 -
算法LeetCode解题(C++)-17. 有效的括号(难度:简单)
注意观察可以发现,后出现的左括号必须先匹配到自己对应的右括号才能符合,因此这里我首先想到的是遍历字符串,将左括号按顺序放入容器中,当遇到一个右括号的时候就匹配容器中的尾部左括号,匹配上则继续。否则返回false,这里需要注意的是第一个字符就是右括号的极端情况处理,容器可以采用vector、stack(栈,先进后出)都可以。vector代码实现如下:bool ValidParenthese...原创 2019-10-31 09:53:33 · 213 阅读 · 0 评论 -
算法LeetCode解题(C++)-16. 删除链表的倒数第N个节点(难度:中等)
题目描述:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题目解析: 首先题目中说明了n保证有效,因此我们不需要...原创 2019-10-30 10:13:09 · 196 阅读 · 0 评论 -
算法LeetCode解题(C++)-15. 四数之和(难度:中等)
题目描述:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求...原创 2019-10-30 09:08:38 · 292 阅读 · 0 评论 -
c++的std::move 原理实现与用法总结
C++11中,std::move存在于<utility>中,std::move函数可以很方便的将左值引用转换为右值引用(左值、右值、左值引用、右值引用等相关介绍可以参看:https://blog.csdn.net/xiaomucgwlmx/article/details/101346463)。实际上,std::move并不可以移动任何东西,唯一的功能就是上边说的将一个左值强制转化为右值...原创 2019-10-29 16:17:44 · 973 阅读 · 1 评论 -
算法LeetCode解题(C++)-14. 电话号码的字母组合(难度:中等)
题目描述:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd"...原创 2019-10-28 10:13:18 · 347 阅读 · 0 评论 -
算法LeetCode解题(C++)-7. 字符串转换整数 (atoi)(难度:中等)
题目描述:请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字...原创 2019-10-15 11:10:46 · 207 阅读 · 0 评论 -
算法LeetCode解题(C++)-6. 整数反转(难度:简单)
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。刚开...原创 2019-10-15 10:04:56 · 170 阅读 · 0 评论 -
算法LeetCode解题(C++)-5. 最长回文子串(难度:中等)
题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"什么是回文串? 就是正读反读都一样的字符串,比如 "bob", "level", "noon" 等等。解题方法: ...原创 2019-10-12 19:14:40 · 258 阅读 · 0 评论 -
详解Unicode 编码
ASCII码在学校学 C 语言的时候,了解到一些计算机内部的机制,知道所有的信息最终都表示为一个二进制的字符串,每一个二进制位有 0 和 1 两种状态,通过不同的排列组合,使用 0 和 1 就可以表示世界上所有的东西,感觉有点中国“太极”的感觉——“太极生两仪,两仪生四象,四象生八卦”。在计算机种中,1 字节对应 8 位二进制数,而每位二进制数有 0、1 两种状态,因此 1 字节可以组合出...原创 2019-08-12 15:00:52 · 226 阅读 · 0 评论 -
C++ STL中各容器内存、优劣的分析
STL有三大核心部分:容器(Container)、算法(Algorithms)、迭代器(Iterator)。以下介绍容器相关内容:各种容器的元素在内存中的储存方式1、vector(向量):相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进...原创 2019-08-12 11:33:38 · 1606 阅读 · 0 评论 -
C++ 11的新特性整理
原创文章,转载请注明:转载自:严健康的个人博客http://www.yanjiankang.cn/本文链接地址:http://www.yanjiankang.cn/cpp_11_new_feature/Lambda 表达式Lambda 表达式就是用于创建匿名函数的。为什么说 lambda 表达式如此激动人心呢?举一个例子。标准 C++ 库中有一个常用算法的库,其中提供了很多算法...转载 2019-08-06 10:43:38 · 137 阅读 · 0 评论 -
QT C++和HTML通信
摘要在QT中和HTML进行通信通过websocket转载请声明原创地址哟。PS:对这块不熟有错误请指出这换行有毒,谅解。概述: C++和HTML通过websocket通信,通过官方的qwebchannel.js实现。 C++和HTML共用一个对象并以此进行通信 C++通知HTML:通过信号 HTML通知C++:直接调用其函数 核心类:QWebChannel QT版本:5.6...转载 2019-03-01 10:24:47 · 709 阅读 · 0 评论 -
使用VLD进行内存泄漏检测(release + debug)
VLD(Visual Leak Detector)是一款用于VisualC++的免费内存泄漏检查工具。功能: 1) 可以得到内存泄漏点的调用堆栈,还可以得到其所在的文件及行号; 2) 可以得到泄漏内存的完整数据; 3) 恶意设置内存泄漏报告的级别; 4) 它以动态库的形式提供,无需编译源代码,只需要很小的改动程序; 5) 源代码使用...原创 2019-02-18 17:18:10 · 3543 阅读 · 0 评论 -
算法LeetCode解题(C++)-4. 寻找两个有序数组的中位数(难度:困难)
题目描述:给定两个大小为 m 和 n 的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3,...原创 2019-02-22 15:25:56 · 1761 阅读 · 0 评论 -
图解时间复杂度
写在前面: 这篇文章是在公众号: 程序员小灰 中发布的。是我到目前为止所看到的关于时间复杂度介绍的最好的文章,简介 清晰 明了。所以拿来po出来 仅供学习交流,如侵则删。 现已将此文收录至: 《数据结构》| 第一章 绪论 知识梳理正文: 时间复杂度的意义 究竟什么是时间复杂度呢?让我们来想象一个场景:某一天,小灰和大...转载 2019-02-21 15:45:19 · 317 阅读 · 0 评论 -
C++11/14之Lambda 表达式
Lambda 表达式是 C++11 中最重要的新特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。这样的场景其实有很多很多,所以匿名函数几乎是现代编程语言的标配。Lambda 表达式基础Lambda 表达式的基本语法如下:[捕获列表](参数列表) mutable(可选) 异常属性 -...原创 2019-01-23 16:29:41 · 225 阅读 · 0 评论 -
C++11/14之区间迭代
基于范围的 for 循环终于,C++11 引入了基于范围的迭代写法,我们拥有了能够写出像 Python 一样简洁的循环语句:int array[] = {1,2,3,4,5};for(auto &x : array) { std::cout << x << std::endl;}最常用的 std::vector 遍历将从原来的样子:...原创 2019-01-23 14:54:24 · 217 阅读 · 0 评论 -
C++11/14之类型推导
在传统 C 和 C++中,参数的类型都必须明确定义,这其实对我们快速进行编码没有任何帮助,尤其是当我们面对一大堆复杂的模板类型时,必须明确的指出变量的类型才能进行后续的编码,这不仅拖慢我们的开发效率,也让代码变得又臭又长。C++11 引入了 auto 和 decltype 这两个关键字实现了类型推导,让编译器来操心变量的类型。这使得 C++ 也具有了和其他现代编程语言一样,某种意义上提供了无需...原创 2019-01-23 14:52:37 · 208 阅读 · 0 评论 -
QT获取操作系统版本
static QString GetSysVersion(){ DWORD dwVersion = 0; WKSTA_INFO_100 *wkstaInfo = NULL; NET_API_STATUS netStatus = NetWkstaGetInfo(NULL, 100, (BYTE **)&wkstaInfo); if (netStatus =...原创 2018-09-12 09:29:20 · 2231 阅读 · 1 评论 -
taskkill /im test.exe /f
是把进程名test.exe强行关闭taskkill是结束任务的意思/f的f是force的意思.原创 2018-09-17 10:14:41 · 2696 阅读 · 0 评论 -
RTMP、RTSP、HTTP协议
这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用 RTMP、RTSP。而点播用 HTTP。下面分别介绍下三者的特点。1,RTMP协议(1)是流媒体协议。(2)RTMP协议是 Adobe 的私有协议,未完全公开。(3)RTMP协议一般传输的是 flv,f4v 格式流。(4)RTMP一般在 TCP 1个...原创 2018-09-10 10:04:04 · 395 阅读 · 0 评论 -
十大经典排序算法(C++、Java实现)动图演示及代码解析-冒泡排序、选择排序、插入排序、快速排序、堆排序、希尔排序、归并排序、计数排序、桶排序、基数排序
和我的LeetCode系列源码放到一起。做IT行业,不管是测试、开发、运维等等,或简单或复杂的算法是必不可少的,也是大家面试工作中的必要环节,这个专栏开始和大家一起来研究著名的LeetCode,里边有上千种最常见的算法,面试工作出现几率很高,值得掌握研究,每次完成博客更新我会同步更新我的个人Github上的代码,每个算法都可以直接运行调试以供掌握,GitHub地址:https://github.c...原创 2018-09-10 14:50:59 · 2640 阅读 · 1 评论 -
时间复杂度和空间复杂度
时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。 (算法的复杂性体现在运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度)。简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间时间复杂度 计算时间复杂度的方法:用常数1代替运行时间中的所有加法常数 修...原创 2018-09-10 17:23:03 · 465 阅读 · 0 评论 -
智能指针
本文将简要介绍智能指针shared_ptr和unique_ptr,并简单实现基于引用计数的智能指针。使用智能指针的缘由 1. 考虑下边的简单代码:1 int main()2 {3 int *ptr = new int(0);4 return 0;5 } 就如上边程序,我们有可能一不小心就忘了释放掉已不再使用的内存,从而导致资源泄漏(resoure l...转载 2018-09-10 17:25:27 · 97 阅读 · 0 评论 -
C++ 引用与指针的比较
引用是 C++ 中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m的一个引用(reference),m 是被引用物(referent)。int m; int &n = m; n 相当于 m 的别名(绰号),对 n 的任何操作就是对m的操作。所以 n 既不是m的拷贝,也不是指向 m 的指针,其实n就是 m 它自己。引用的规则:(1)引用被创建的同时必须...转载 2018-09-10 17:29:40 · 113 阅读 · 0 评论 -
C++中static关键字作用总结
1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){ printf("Hello\n")...转载 2018-09-10 17:50:31 · 342 阅读 · 0 评论 -
7z的命令详解
7z.exe在CMD窗口的使用说明如下:7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06Usage: 7za <command> [<switches>...] <archive_name> [<file_names>...][<@listfiles...>...转载 2018-09-13 17:35:58 · 1863 阅读 · 0 评论 -
__GNUC__ _MSC_VER
一、预定义__GNUC__宏 1 __GNUC__ 是gcc编译器编译代码时预定义的一个宏。需要针对gcc编写代码时, 可以使用该宏进行条件编译。 2 __GNUC__ 的值表示gcc的版本。需要针对gcc特定版本编写代码时,也可以使用该宏进行条件编译。 3 __GNUC__ 的类型是“int”,该宏被扩展后, 得到的是整数字面值。可以通过仅预处理,查看宏扩展后的文本...原创 2018-10-31 11:48:03 · 1975 阅读 · 0 评论 -
C++11/14之无序容器
我们已经熟知了传统 C++ 中的有序容器std::map/std::set,这些容器内部通过红黑树进行实现,插入和搜索的平均复杂度均为O(log(size))。在插入元素时候,会根据<操作符比较元素大小并判断元素是否相同,并选择合适的位置插入到容器中。当对这个容器中的元素进行遍历时,输出结果会按照<操作符的顺序来逐个遍历。而无序容器中的元素是不进行排序的,内部通过 Ha...原创 2019-01-23 18:10:22 · 333 阅读 · 0 评论 -
C++11/14之智能指针std::shared_ptr
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。但还不够,因为使用 std::shared_ptr 仍然需要使用 new 来调用,这使得代码出现了某种程度上的不对称。std::make_shared 就能够用来消除显示的使用 new,所以std::make_...原创 2019-01-23 18:40:58 · 240 阅读 · 0 评论 -
C++11/14之智能指针std::unique_ptr
std::unique_ptr 是一种独占的智能指针,它禁止其他智能指针与其共享同一个对象,从而保证了代码的安全:std::unique_ptr<int> pointer = std::make_unique<int>(10); // make_unique 从 C++14 引入std::unique_ptr<int> pointer2 = poin...原创 2019-01-23 18:41:57 · 367 阅读 · 0 评论 -
算法LeetCode解题(C++)-3. 无重复字符的最长子串(难度:中等)
题目描述:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为...原创 2019-01-19 10:25:26 · 2035 阅读 · 0 评论 -
算法LeetCode解题(C++)-1. 两数之和(难度:简单)
题目描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...原创 2019-01-15 18:05:22 · 211 阅读 · 0 评论 -
算法LeetCode解题(C++)-2. 两数相加(难度:中等)
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&...原创 2019-01-15 19:19:26 · 962 阅读 · 0 评论 -
C++11/14之被弃用的特性
注意:弃用不等于废弃,只是用于暗示程序员这些特性将从未来的标准中消失,应该尽量避免使用。但是,已弃用的特性依然是标准库的一部分,并且出于兼容性的考虑,这些特性其实会『永久』保留。 如果一个类有析构函数,为其生成拷贝构造函数和拷贝赋值运算符的特性被弃用了。 不再允许字符串字面值常量赋值给一个 char *。如果需要用字符串字面值常量赋值和初始化一个 char *,应该使用 ...原创 2019-01-23 14:27:37 · 1352 阅读 · 0 评论 -
extern用法总结
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。1. extern修饰变量的声明。如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明ex...转载 2018-08-29 11:50:28 · 170 阅读 · 0 评论