C与C++
u011822516
这个作者很懒,什么都没留下…
展开
-
代码优化1:使用条件数据传送代替条件控制
代码优化1:使用条件数据传送代替条件控制本文是阅读深入理解计算机系统第六章的随笔,也就是如何优化代码.本来最开始谈谈如何优化循环,后来发现这个问题太大了,所以先讲讲简单条件数据传送条件控制转移条件控制转移指依据代码的条件结果来选择运行的路径。条件传送指先把结果运行,在依据条件结果选择结果值在同样的情况下,条件传送性能比条件控制转移高.我们看看下面的这个例子这是使用条件控制转移void...原创 2018-12-16 21:29:01 · 1245 阅读 · 4 评论 -
快速判定x是否为2^n幂。
最近学到 x&(x-1) 这个式子的两个用法,跟大家分享一下。作用:将x的二进制表示从最低位起第一个为1的位清0;一、快速判定x是否为2^n幂。如果x!=0 且x&(x-1)==0,则x为2的n次幂。(当然不能判定n是多少)前提条件:x数据类型应为整数;#define ispow2(x) ( (x) 二、x=x&(x-1);相关应转载 2015-11-27 14:51:07 · 695 阅读 · 0 评论 -
LintCode-寻找旋转排序数组中的最小值
问题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路:一个递增数组经旋转后分为两部分,它们都是递增的数组,第一个子数组的第一个元素不小于第二个子数组的最后一个元素,我们要寻找的是第一个子数组最后一个元素的下一个元素或转载 2015-11-16 11:44:53 · 1256 阅读 · 0 评论 -
使用两个栈实现一个队列
其实这个方法也可以使用与使用两个队列实现一个栈,利用一个队列作为缓冲的方法zt原文已知下面Stack类及其3个方法Push、Pop和 Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法。 class Stack{…public: void Push(int x); // Push an element转载 2015-10-28 00:20:21 · 452 阅读 · 0 评论 -
字符串匹配 sunday算法
原题:lintcode题目字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数。你的任务是实现这个函数。对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。字符串匹配最常见的就是kmp算法,不过kmp算法对于我来说过于的复杂,我在原创 2015-10-09 10:57:05 · 531 阅读 · 0 评论 -
算法题 子数组之和为零
lintcode 138 子数组之和为零给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置这里给定是思路是这样的,依次求数组nums的前缀和,其前缀和的数组为S,对于S[i],S[j],(i>j)如果S[i],S[j],相等,这说明nums[i+1],nums[i+2]....nums[j]的子数组的和为0;这里利用h原创 2015-10-20 10:40:04 · 1903 阅读 · 0 评论 -
lintcode 木材加工
有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。样例有3根木头[232, 124, 456], k=7, 最大长度为114.注意木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k原创 2015-11-05 09:59:47 · 946 阅读 · 0 评论 -
算法题 lintcode 434 Maximal Square
原题目如下:Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.样例For example, given the following matrix:1 0 1 0 01 0 1 1 11 1 1原创 2015-09-10 10:59:39 · 479 阅读 · 0 评论 -
intptr_t类型
今天在知乎上看到一个关于size_t和uintptr_t的问题,特地去百度可以下找到这篇文章摘抄下来看看最近在看nginx源码,看到有一个类型intptr_t,没有见过,google了一下,有人说是指针类型,但是看nginx源码中对该类型变量的使用,好像不是指针类型。[cpp] view plaincopystatic ngx_int转载 2015-07-09 11:51:50 · 1369 阅读 · 0 评论 -
lintcode 删除数字
lintcode 删除数字给出一个字符串 A, 表示一个 n 位正整数, 删除其中 k 位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。找到删除 k 个数字之后的最小正整数。N k N很普通的一个贪心法。想选择一个前面对应位数的最小值,在之后这个值背后选择对应的最小值.class Solution {publi原创 2015-12-17 10:13:35 · 1865 阅读 · 0 评论 -
堆排序使用的问题
堆排序使用的方法是一种内部的合并排序,是一种 不稳定的内部排序.不过由于对于top k这一类问题和衍生的问题,即在同时需要处理k个值,所堆排序延伸出的最大堆和最小堆而言优势明显.只会需要O(n lgK).的复杂度.top K问题给定一组任意顺序的数,假设有n个。如何尽快地找到它们的前K个最大的数?首先,既然是找前K个最大的数,那么最直观的办法是,n个数全原创 2016-01-19 14:08:31 · 497 阅读 · 0 评论 -
从源代码级别的角度看php var_dump和echo的区别
从源代码级别的角度看php var_dump和echo的区别上周五同事出了一道有趣的题目,题目是这样:答案很神奇是1,而一旦把echo替换成了var_dump,则这是一个null.根据文档我们可以看到unset转换当然是什么造成echo和var_dump的区别呢,这就要从源代码级别进行讨论了.本文并不会像某些文章一些罗列大量的二者的区别,想要看这种面试题,请自行打开搜索引擎.变量的...原创 2018-12-16 20:44:57 · 1647 阅读 · 0 评论 -
关于浮点数的一些常见要点
关于浮点数的一些常见要点本来这里应该有一篇关于浮点数的介绍的文章,不过个人认为书里面写得还是比较完善了,就暂时想欠着了,而这些关键点书里面一般介绍的比较少,我个人认为应该单独写文章出来浮点数的不精确性正如绝大多数的文章都会告诉你的一样,浮点数都是不精确的,所有浮点数都无法精确地表达实数.举一个例子,比如.0.01 在单精度浮点型中可以用说是0.0100000000029802322609...原创 2018-11-18 21:49:02 · 777 阅读 · 0 评论 -
无符号数 有符号数 与 补码
无符号数 有符号数 与 补码本文是深入理解计算机系统这本书里面关于补码有符号数无符号数章节的一个摘要和读书报告,我个人认为这本书关于这一段的表述,要比绝大多数网上的博客甚至是国内教材要深入浅出的多.同时由于markdown的文档表示公式很麻烦,本文将大量使用书中的截图作为公式使用.===无符号数书中采用一个函数B2U w(binary to unsign ,二进制向量长度为w)将一个二进制...原创 2018-10-16 22:43:34 · 10238 阅读 · 0 评论 -
二叉树层次遍历
给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构:对此二叉树遍历的结果应该是:1,2 , 34, 5, 67, 8第一种方法,就是利用递归的方法,按层进行打印,我们把根节点当做第0层,之后层次依次增加,如果我们想打印第二层怎么办呢,利用递归的代码如下:[cpp] view plain转载 2015-12-25 09:59:46 · 548 阅读 · 0 评论 -
LinCode落单的数
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2,1,3,4,3],返回 4挑战一次遍历,常数级的额外空间复杂度原本的想法是利用hash表,将数陆续放入hash表中,一旦出现匹配则,删除hash表中的数,最后剩下的数就是返回值了。后来经过百度发现了更为简单的方法。原创 2015-12-07 10:19:48 · 993 阅读 · 0 评论 -
lintcode 判断一个单链表是否有环及环的链接点
今天又一次做了这个参见的题目,不过是在不想写东西了,随手转载一篇给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存转载 2015-12-22 09:54:57 · 449 阅读 · 0 评论 -
递归与尾递归总结
编者按:尾递归最大的好处就是不需要保存当前函数的现场,在汇编级别即不需要call和set了1、递归 关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点:(1) 递归就是在过程或函数里调转载 2015-12-03 00:11:33 · 432 阅读 · 0 评论 -
litcode 合并两个排序链表 递归求解
将两个排序链表合并为一个新的排序链表给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。其中链表定义如下:class ListNode { public: int val; ListNode *next; ListNode(int val) {原创 2015-12-20 17:15:09 · 685 阅读 · 1 评论 -
关于C++的一些小知识点
1.C++中,临时对象都是const类型的。实际上这种说法应该来源自大名鼎鼎的.但是根据我的理解这种说法实际上是错的.真正的说法应该是这样的仅当通过传值(by value)方式传递对象或传递常量引用(reference-to-const)参数时,才会发生这些类型转换(产生临时对象)。当传递一个非常量引用(reference-to-non-const)参数对象就不会发生。原创 2014-10-19 18:08:20 · 458 阅读 · 0 评论 -
基数排序与通排序
【1】基数排序以前研究的各种排序算法,都是通过比较数据大小的方法对欲排数据序列进行排序整理过程。而基数排序却不再相同,那么,基数排序是采用怎样的策略进行排序的呢?简略概述:基数排序是通过“分配”和“收集”过程来实现排序。而这个思想该如何理解呢?请看以下例子。(1)假设有欲排数据序列如下所示:73 22 93 43 55 14 28 65 39转载 2015-01-19 20:19:44 · 1066 阅读 · 0 评论 -
转载C++11新特性auto
C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。转载 2014-12-12 15:28:24 · 467 阅读 · 0 评论 -
中缀表达式生成二叉树并利用后缀表达式进行求值运算
这次是某人给的题目,题目不难,但是很复杂原创 2014-10-26 17:21:46 · 5528 阅读 · 0 评论 -
C++ stl库介绍一 vector
C++ stl库介绍一 vector 在这里我先假定读者具有一定的代码阅读量,起码可以和我处在同一档次上.因此看下面的部分代码,不需要我加注释. Vector是我最早接触的stl容器,最开始使用的使用,一直是当做数组的替代品使用,但是也以为vector是C++用包装好的数组,结果,后来发现在容器(container)中还有一类arra原创 2014-09-28 00:11:31 · 814 阅读 · 0 评论 -
(翻译)C++ 多态机制
C++ 多态机制 在更深入的了解本章节前,你需要对于指针与类的继承有初步的理解.如果你不是很确定是否理解以下的表达式,你需要复习下列的章节Statement:Explained in:int A::b(int c) { }Classesa->bData structure翻译 2014-09-25 00:29:24 · 562 阅读 · 0 评论 -
引用与指针在底层实现研究
这个题目最初是学弟问我的原创 2014-09-21 01:19:36 · 1385 阅读 · 0 评论 -
ZT从底层汇编理解 c++ 引用实现机制
引用类型到底是什么?它和指针有什么关系?它本身占用内存空间吗? 带着这些疑问,我们来进行分析。 先看代码:[cpp] view plaincopyprint?#include #include using namespace std; void main() { int x = 1;转载 2014-09-21 01:23:14 · 558 阅读 · 0 评论 -
qsort.c源代码分析
qsort是集成在标准C里头的库函数,使用起来简洁方便,当然他与std::sort万年不变的效率之争还是很有看头(感兴趣的朋友可以看这个网址http://www.cnblogs.com/guaiguai/archive/2008/12/12/1353390.html).由于微软十分大方的将qsort的源码放出,自然就给了鄙人围观的机会(顺便一提std::sort也是有的,不过我对Templat原创 2013-12-01 21:01:00 · 7015 阅读 · 4 评论 -
数组与指针
数组与指针 最初之所以想写这篇博客,是因为在quora上看到回答,(http://www.quora.com/C-programming-language/In-C-or-C++-what-are-your-favorite-pointer-tricks)英文好的诸位可以自行去看看How long is that array?Using the sizeof is simpl原创 2013-09-28 14:53:38 · 693 阅读 · 0 评论 -
使用vector 和map构造二维矩阵和二维表格
使用vector 和map构造二维矩阵和二维表格众说周知,我们可以适应vector容器来构造二维数组.当然这样虽然会带来安全性的优势但是会带来效率上的低下.效率差异的主要原因便在于编译器对二维数组的优化.当然,在平日的编写过程中由于安全性的原因,我个人是比较倾向于使用.关于二者效率的对比可以看下列网址http://www.programfan.com/club/showpost.asp原创 2013-11-19 19:27:20 · 4691 阅读 · 0 评论 -
动态规划
终于来到了算法设计思想中最难,也最有趣的这部分,在去年的google笔试中,7道算法设计题有2道动态规划(Dynamic Programming)。看了这么久的算法,这部分也是唯一感觉到了比较难的地方,从这篇文章开始,将花连续的篇幅来讨论一些动态规划的问题。这包括书上介绍过的计算二项式系数,Warshall算法求传递闭包,Floyd算法求完全最短路径,构造最有二叉查找树,背转载 2014-10-28 14:48:19 · 566 阅读 · 0 评论 -
C++STL 之 迭代器
C++STL 之 迭代器 说道stl,迭代器都是一个无法回避的话题,迭代器在stl中起着一个中介层的作用,一侧是标准的容器类,另一侧则是算法(algorithm).1.迭代器与指针迭代器是指向某个元素集合中指向某个元素的物体,从这一点上看,他和指针很类似,只是多了一层封装,但是迭代器和指针却又有所不同.那么迭代器是不是指针呢?要看容器而定,由上可知,vector的迭代器原创 2014-10-17 23:45:46 · 472 阅读 · 0 评论 -
归并排序的实现与讨论
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy转载 2015-01-14 09:54:24 · 572 阅读 · 0 评论 -
windows 环境下 0x色彩对应表
常用 0x色彩表原创 2015-01-13 17:29:52 · 18236 阅读 · 0 评论 -
win32 键盘 鼠标事件
VC 中用 KeyPress 表示键盘响应的所有事件,包括 OnKeyDown 事件(键按下)、 OnKeyUp 事件(键按下后弹起)和 OnKeyPress 事件(按了某个键)。OnKeyuUp 事件的语法为 void Object1:: OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );OnKeyDown 事件的语法为 v转载 2014-12-19 16:21:48 · 3023 阅读 · 0 评论 -
win32显示gif图片
最近在写win32的发送图片程序,由于要求适配gif格式,不得不强迫自己写了这么一个程序,主要参考了VC++ win32 sdk 显示 gif 图片,不过里面的每一帧的显示时间时间设成了固定值,我在代码中写了一个函数获取gif的间隔时间进行了修改我把函数写到了一个cpp和一个h文件中,大家使用的时候调用OpenGifThread函数就可了ShowGif.h的内容#include原创 2014-12-17 20:33:00 · 2420 阅读 · 1 评论 -
构造后缀树
后缀树是字符串匹配算法中一种重要的数据结构,同时使用这种数据结构可以完成许多关于字符串的算法.可是看了许多blog都没有说怎么构造,只有所谓的利用哈希来构造,在网上找到了这一篇译文,便转载过来,周末有时间写一个使用哈希表来构造后缀树的博客吧 后缀树Fast String Searching With Suffix Trees 原著 Mark Nelso转载 2014-12-17 09:43:36 · 1003 阅读 · 0 评论 -
win32下实现透明窗口
最开始写透明窗口的代码,在百度了之后,找到了SetLayeredWindowAttributes()这一个函数,但是由于网上案列的缺少,使得很多人无法很好的使用这一个方法,我花了几天的时间写了一个实现窗口透明的类,在这里放出来,给大家使用#define WS_EX_LAYERED 0x00080000#define LWA_COLORKEY原创 2014-12-15 18:51:13 · 9301 阅读 · 5 评论 -
C++单件模式
单件模式应该是所有设计模式中最简单的一个了,但是如果使用不当会出现很多问题,下面我们就分析一下单件模式作用:保证一个class只有一个实体(instance),并为它提供一个全局唯一的访问点 适用性:1、对于一个类(对象),如果它比较大(占用的系统资源非常多),而且这些资源可以被全局共享,则可以设计为singleton模式。2、对于一个类,需要对实例进行计数。可以在In转载 2014-12-15 20:41:22 · 512 阅读 · 0 评论 -
C++ stl之set容器
set容器,即集合容器原创 2014-11-23 16:50:41 · 499 阅读 · 0 评论