C++
老司机的诗和远方
非1即0!
展开
-
提高codeing运行时间效率
使用现有著名高效算法通过内联inline增加代码量来节省运行时间函数采用返回引用而不是返回值,因为返回值需要高昂的拷贝开销减少空闲存储空间(new和malloc申请内存)和堆栈空间使用尽可能快地释放空闲资源小心处理static静态对象,使用完最好释放掉资源局部使用庞大对象是不明智,但是非要用的话请用指针指向new申请的空闲储存空间,要记得使用完毕删除对象 8.原创 2017-07-26 11:14:59 · 374 阅读 · 0 评论 -
剑指offer—实现二维数组元素查找的拓展
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(题目来自剑指offer第3题)解:得到的信息如下,行列非递减,但不保证后一行元素一定比前一行所有元素大!实现:思路是定行,再在列上使用二分查找,即可!关键是怎么锁定某一行,如果是从左上角扫描,是没办法实现高效的算法,二维数组的...原创 2018-02-20 17:17:18 · 336 阅读 · 0 评论 -
调整数组使得奇偶分离
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变解法:1、要想快速就得牺牲空间,但是最好注意输入数组的大小,要是大型的话,这里牺牲空间就非常不可取,暂用内存多!临时开辟一个完全一样的数组,然后遍历两次就可以实现奇偶数分离。时间O(n)2、第二种方式是采用向前推的方式,这...转载 2018-02-28 20:55:09 · 976 阅读 · 0 评论 -
输出链表倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。 解题:A常规做法是计算出链表长度然后计算出倒数点位置O(n);B另外做法是用两个指针,一开始一个指针先走k-1步到达第k个节点(要是遇到null直接返回NULL,说明k大于链表长度不合法),然后两个指着再同步往下走,走完即可。(核心是两个指针保持一定长度)。A常规实现代码:ListNode* FindKthToTail(ListNode* pLis...原创 2018-02-28 21:37:08 · 514 阅读 · 0 评论 -
剑指offer-反转链表输出
题目:输入一个链表,反转链表后,输出链表的所有元素。解法:头插法,新建一个链表,千万不能是指向之前链表的头结点!自己新建一个头结点! ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL) return NULL; ListNode* p=pHead,newHead(0); ...原创 2018-02-28 22:06:55 · 243 阅读 · 0 评论 -
编程不可不知的内存构造
一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。(比较远速度就比较慢) 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内...原创 2018-02-21 20:39:47 · 396 阅读 · 0 评论 -
合并两个有序的链表新的链表也要有序
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解法:两个指针指向两个链表,依次判断,谁小就接谁,谁也就获得前进(竞争前进)代码如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }}; ListNo...原创 2018-03-01 15:02:11 · 268 阅读 · 0 评论 -
C/C++结构体初始化
C语言结构体初始化,可以如下四种:#include <stdio.h>int main(int argc, const char * argv[]) { //定义结构体类型 struct Person { char *name; int age; double heigth; }; ...原创 2018-02-22 16:50:03 · 678 阅读 · 0 评论 -
反转链表输出
题目:输入一个链表,从尾到头打印链表每个节点的值。解题:使用容器的头插入,或者自己再建一个链表,头插入!而且链表在做的时候要咨询是否可以改变其结构!以及头结点是否有存储有用数据(因为这个因需求设计而异)总结:关于链表知识,头指针、头结点、第一个节点区别!头指针指向头结点,一般头结点不算第一个节点,头结点的存在使得链表可以是空表,也使得链表的插入查询等操作保持一致性!这一点非常有用,当然也有链表的头...原创 2018-02-22 16:54:39 · 308 阅读 · 0 评论 -
剑指offer-寻找树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解法:只有节点相同才有可能需要遍历到底有没有其子结构没有就要往左节点走,以及右孩子走!二叉树的操作都会比较抽象,抽象主要体现在程序运行执行过程struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tr...原创 2018-03-01 16:20:13 · 285 阅读 · 0 评论 -
剑指offer—寻找数组最小的k个数
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析:传统的做法可以是o(nlog(n)),就是先排序然后从前面中取出k个值。高效的做法可以实现o(nlogk),借助一个容器,容量k,将数组的读入k个数存放在容器中,然后继续访问数组后面的数,将其后每个数和容器中最大值比较,比最大值小则剔除容器中最大值,同时将该数放入容...原创 2018-02-19 21:25:48 · 336 阅读 · 0 评论 -
C++之set和multiset红黑树
set和multiset 会根据特定的排序准则,自动将元素排序。两者不同之处,在于multiset允许元素重复,而set不允许重复,如图1所示。图1 set和multiset在使用set和multiset之前,需要包含头头文件<set>,Set 和multiset的原型如下:namespace std{ template < class T, class Compa...转载 2018-02-19 20:18:15 · 1689 阅读 · 0 评论 -
程序错误类型及其处理
程序在设计调试甚至运行都难免出现错误,我们要做的是检测错误。程序库错误指的是程序库实现错误,当然,程序库的提供者在程序库发布之前,肯定想尽可能多地检测和纠正错误,但是任何比较大的程序库在发布的时候,都是肯定会包含错误的。用户错误主要是用户操作不当,指如何使用程序库方面的错误系统错误指用户程序和该程序所运行的系统之间发生交互时所引发的错误。这种错误部分是系统的责任,部分是用户的责任。错误检测一般会额外原创 2017-07-26 17:08:56 · 2135 阅读 · 0 评论 -
程序冲突及其解决
描述对于两部分软件,如果它们不能在同一个程序里很容易地用在一起,那么我们就称这两部分软件是冲突的。可重用代码应该尽可能地避免这种冲突。程序库使用的名字可能会和其他程序库的名字发生冲突,这些冲突包括全局名称,宏名称和环境名称相互之间的冲突。原创 2017-07-26 23:12:23 · 2354 阅读 · 0 评论 -
程序兼容性
代码版本可以提供各种不同形式的兼容性:源代码兼容性,链接兼容性,运行兼容性,和进程兼容性。这些都是根据C++程序创建各个过程命名的, 1、如果没有用户需要重新编译任何代码,那么程序库的版本n和版本m就具有源代码兼容性 2、如果没有用户需要重新编译任何代码,那么版本n和版本m就具有链接兼容性 3、如果没有任何目标文件等需要重新链接,那么版本n和版本m进程兼容性理论源代码兼容性源代码兼容性主要指的原创 2017-07-27 22:54:22 · 1331 阅读 · 1 评论 -
C++继承体系
一个继承体系的根数目,深度和扇出数是否合适,要取决于这个体系要模拟的领域和这个领域所需要的特性。 1、原创 2017-07-28 11:05:55 · 425 阅读 · 0 评论 -
可移植性
对于一段代码,它的移植性越好,重用性就越好! 可可移植性优缺点可移植性通常会和效率与实现的难易程度相互制约,具体地说,在一个或者多个平台上容易实现的可移植性代码通常都是低效的,通用既低效,专用才高效! 常会用 #indef XXXX ………………. #else ………………… #endif 条件编译是针对不同平台执行不同接口,好处就是高效。因为不同平台原创 2017-07-28 23:06:18 · 3086 阅读 · 0 评论 -
格式化字符输出
格式符格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:%s 字符串 (采用str()的显示)%r 字符串 (采用repr()的显示)%c 单个字符%b 二进制整数%d 十进制整数%i 十进制整数%o 八进制整数%x 十六进制整数%e 指数 (基底写为e)原创 2018-01-28 09:31:26 · 565 阅读 · 0 评论 -
剑指offer-旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路分析:普通做法直接用排序的思路O(n),但是这道题有高效的做法,就是旋转之后数组其实是由两个有序数组排列,因此可...原创 2018-02-26 23:06:47 · 218 阅读 · 0 评论 -
剑指offer-金典的dfs
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解法:很明显是深度搜索,DFS。关键在于创造一个记录路径(记录路径中行走),用一个引用来传参做全局记录。 vector<vector<int> > FindPath(TreeNode* root,int expectNum...原创 2018-03-07 11:15:30 · 379 阅读 · 0 评论 -
剑指offer-斐波那契现实版以及升级玩法
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法解法:1、规律法,可以罗列出各个阶级对应的跳法,然后总结规律2、使用动态思想,视作一个递归,每一次走一步或者两步之后两个支路进行解法(全局缩放到局部)递归代码是如此简单: int jumpFloor(int number) { if(number<=1) ...原创 2018-02-27 17:19:37 · 257 阅读 · 0 评论 -
剑指offer-二叉树镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5解法:其实观察可以发现从上往下...原创 2018-03-01 16:30:38 · 247 阅读 · 0 评论 -
C++多态剖析
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类...转载 2018-03-01 21:11:29 · 249 阅读 · 0 评论 -
剑指offer-两个栈实现队列
/*用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解思路:1、一个栈作为输入接收2、一个作为输出缓冲或者1、一个作为输出2、一个作为输入数据处理缓冲*/#include<iostream>#include<vector>#include<stdio.h>#include<stack>using namespace...原创 2018-02-23 16:06:53 · 247 阅读 · 0 评论 -
校招算法题大汇总
题1、小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果。给定四个整数A,B,C,D,请返回所求结果。测试样例:100,90,80,70返回:1020刚开始做这个题收到了...原创 2018-09-09 16:57:59 · 1014 阅读 · 0 评论 -
windows纯C++实现串口通信
参考https://github.com/ayowin/WZSerialPort,感谢作者提供的源码,自己再进行接口的优化,使用string更加简单。点h文件#ifndef _WZSERIALPORT_H#define _WZSERIALPORT_H#include <iostream>using namespace std;/* 作者:欧阳伟 日期:20...原创 2018-10-01 11:29:36 · 38791 阅读 · 66 评论 -
VS关于LINK2019无法解析的错误的分析及其解决
由于经常使用VS的开发环境,所以经常遇到一些错误提示,其中error LNK2019是很常见的一个报错。今天将此错误的原因和常见解决办法根据自己的经验小小总结一下。 问题样式: 1>SingleView.obj : error LNK2019: 无法解析的外部符号 __imp__wglCreateContext@4,该符号在函数 "protected: int __thiscal...转载 2018-09-27 16:58:58 · 11756 阅读 · 2 评论 -
关于在VS里面使用别人的库
1、添加头文件2、库文件3、还要在链接器->输入->附加依赖项:添加l所需的lib的名字及其后缀全称原创 2018-09-27 17:01:54 · 582 阅读 · 0 评论 -
opencv 函数pointPolygonTest 检测一个点是否在多边形内
opencv函数pointPolygonTest:C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)Performs a point-in-contour test.C++: double pointPolygonTest(InputArray contour, Point2f...转载 2018-10-06 12:17:34 · 3639 阅读 · 0 评论 -
opencv外接矩形
可以获得轮廓的外接矩形有两种接口,但是接口返回的参数是不一样的CV_EXPORTS_W Rect boundingRect( InputArray points );返回的是Rect类型,也就是上面图片的绿色框CV_EXPORTS_W RoatedRect minAreaRect( InputArray points );该方法返回的就是上面的红色的框!是一种最小的外接矩形...原创 2018-10-25 15:43:29 · 3700 阅读 · 0 评论 -
关于float数值出现1.QNAN处理
c++里面float数值出现1.QNAN检测方法:bool is_float_valid(float f){ //detect invalid float :1.QNAN return((DWORD&)f & 0x7f800000) != 0x7f800000;}原创 2018-11-01 15:27:04 · 1837 阅读 · 0 评论 -
win_socket 报错
window调用socket包含文件顺序一定是:#include <WINSOCK2.H> //优先包含于#include<windows.h>#include <windows.h> 一定要遵守上面,否者报错误类型!!...原创 2019-01-22 20:26:36 · 363 阅读 · 0 评论 -
windows定时线程类
thread.cpp#include "thread.hpp"Thread::Thread() :m_stopFlag(false) ,m_hThread(INVALID_HANDLE_VALUE){}Thread::~Thread(){ Stop();}void Thread::Start(){ unsigned long *p =NU...原创 2019-01-28 19:32:57 · 317 阅读 · 0 评论 -
十六进制转换成整型和浮点型
1、十六进制hex转换为整型思路:这个比较简单,只需要进行移位即可,整型在计算机本质的存储是二进制//int is 4 char,need the input is array with four hex; int char4_int(unsigned char* pData){ int t = 0; for (int i = 0; i < 4; i++){ ...原创 2018-09-02 11:15:14 · 5429 阅读 · 0 评论 -
opencv3的Mat数据访问
访问代码如下: for (i = 0; i < height; i++){ for (j = 0; j < width; j++){ uchar H = *(HSV.data + i*HSV.step[0] + j*HSV.step[1] + HSV.elemSize1()*0); uchar S =...原创 2018-09-04 17:04:34 · 687 阅读 · 0 评论 -
剑指offer-实现栈最小值获取
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解法:其实这道题不难,只需要借助一个辅助的栈用来保存每新压加一个值入栈,就保存当前当前最小值在另外一个辅助栈中,然后出栈的时候就要检测当前出栈元素在辅助栈中栈顶是否有,如果有也要同步出栈!代码如下: stack<int> stack,min_stack; void push(int value)...原创 2018-03-02 21:26:48 · 376 阅读 · 0 评论 -
剑指offer-根据入栈顺序判断出栈顺序是否正确
bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.empty()) return false; stack<int> temp; for(int i=0,j=0;i<pushV.size();i++)...原创 2018-03-02 22:50:26 · 873 阅读 · 1 评论 -
C++队列
基本操作:push(x) 将x压入队列的末端pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值front() 返回第一个元素(队顶元素)back() 返回最后被压入的元素(队尾元素)empty() 当队列为空时,返回truesize() 返回队列的长度使用方法:头文件:#include <queue>声明方法: 1、普通声明queue<int> q;2....转载 2018-03-03 14:40:39 · 468 阅读 · 0 评论 -
剑指offer-由上而下由左到右输出二叉树节点值
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解法:关键点是当前层打印输出之后,下一层节点我应该要保存,也就是边打印边输出的时候也要边保存下一层节点,这样的数据结构队列最适合!具体的代码如下 vector<int> PrintFromTopToBottom(TreeNode* root) { if(root==NULL) r...原创 2018-03-03 14:53:25 · 595 阅读 · 0 评论 -
剑指offer-二叉搜索树后序输出正确判断
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解法:这里注意!!是二叉搜索树!!二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树...原创 2018-03-03 15:50:25 · 256 阅读 · 0 评论