自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 资源 (2)
  • 收藏
  • 关注

原创 nginx 学习(二) hello world 程序

hello wrold1 本节目的2实现步骤  2.1config编写  2.2模块代码实现  2.3配置文件的编写3将模块编译进nginx中1本节的目的本节用nginx来实现一个经典程序hello world,这个程序也是我们学任何编程语言时首先接触的程序,这个程序的目的是初步了解nginx怎样嵌入第三方模块,也是学习nginx的HTTP模块的入门

2014-09-13 21:30:23 2423

原创 nginx学习(一)nginx安装

Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%。与Apache相比,Nginx在高并发情况下具有巨大的性能优势。

2014-09-13 19:40:37 1301

原创 022(n>0 && ((n & (n-1)) == 0)) (keep it up)

以下代码的作用:(n>0 && ((n & (n-1)) == 0))很简单:判断n是否为2的整数次幂写程序计算从整数A变为整数B需要修改的二进制位数。输入:31,14输出:2这个题也很简单:A和B异或然后再算结果中1的个数代码:int getModifyNum(const int vA, const int vB){ int Tmp = vA

2014-09-12 00:47:56 1486

原创 022给定一个字符串类型(string)表示的小数,打印出它的二进制表示(keep it up)

给定一个字符串类型(string)表示的小数,打印出它的二进制表示。这个题注意字符串的合法性。不过下面的代码没有处理那种无限循环的小数,当出现无限循环小数时,while(other>0)可能永久为true代码:#include #include std::string to_binary_string(const std::string& vNumStr){ std:

2014-09-11 00:58:28 1463

原创 021位操作1(keep it up)

给定两个32位的数,N和M,还有两个指示位的数,i和j。写程序使得N中第i位到第j位的值与M中的相同(即:M变成N的子串且位于N的第i位和第j位之间)例子:输入: N = 10000000000, M = 10101, i = 2, j = 6输出: N = 10001010100解法:首先我们把M左移vI位得到Mv;然后我们保留N的0到I位:Si=N & ((1然

2014-09-10 00:55:11 1029

原创 020给定两个二叉树T1,T2判断T1是否是T2的子树(keep it up)

给定两个二叉树T1,T2判断T1是否是T2的子树首先在T2中查找T1的根节点,如果找不到,则T1不是T2的子树,如果能找到,我们可以遍历T1,检查T1的每个结点是否对应的存在T2中。代码:struct TreeNode{ int data; TreeNode* leftChild; TreeNode* rightChild;};bool isExited(co

2014-09-09 00:50:58 2073

原创 019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)

写程序在一棵二叉树中找到两个结点的最近共同祖先。分两种情况来讨论这个题:第一种情况结点中没有指向父结点的指针第二种情况接种有指向父节点的指针我们先看第一种情况,结点中没有指向父结点的指针。我们可以采用暴力搜索每一个结点,如果这个结点的子树中有已知的两个结点,那我们就继续沿着左右子树找,如果左子树能找到,我们就继续沿着左子树找,如果有子树能找到,我们就沿着右子

2014-09-07 01:54:23 2043

原创 018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)

给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点(即中序遍历后它的后继结点), 其中每个结点都有指向其父亲的链接。这个题本质就是线索化二叉树时找后继结点的题。找后继结点存在两种情况:1 如果当前结点有右孩子,则后继结点为右孩子的最左结点2 如果没有右孩子,     A 当前结点为父结点的左孩子,则父结点就是后继结点B 当前结点为父结点的右孩子,则向父结点找,直到

2014-09-03 01:04:00 1514

原创 (017)将一棵二叉查找树重构成链表(keep it up)

给定一棵二叉查找树,设计算法,将每一层的所有结点构建为一个链表(也就是说, 如果树有D层,那么你将构建出D个链表).这个题实质是个BFS,但是实现起来有点麻烦,又不像常见的BFS,所以编写代码时有点艰难。下面的代码使用两个list来实现层次遍历的,首先用Cur链表存储当前层的结点,然后用Pre链表存储当前层的子层结点,Cur和Pre。下一次遍历时Pre就变成当前层,Cur就

2014-09-01 01:01:20 1144

原创 (016)给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树(keep it up)

给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树。由于数组是递增有序的,每次都在中间创建结点,类似二分查找的方法来间最小树。struct TreeNode{ int data; TreeNode* leftChild; TreeNode* rightChild;};void newNode(TreeNode*& vNode, int vData){ vNode

2014-08-30 01:48:52 1934

原创 (015)实现一个函数检查一棵树是否平衡(keep it up)

实现一个函数检查一棵树是否平衡。对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。这个题我们可以采用暴力搜索,找到叶子节点到根节点的最小值和最大值,然后他们的差如果大于1就不是平衡树,反之则是平衡树。int MinDepth = std::numeric_limits::max();int MaxDepth = std::numeric_limits::

2014-08-29 02:41:21 1340

原创 014写程序将一个栈按升序排序,对这个栈是如何实现的,你不应该做任何特殊的假设(keep it up)

写程序将一个栈按升序排序。对这个栈是如何实现的,你不应该做任何特殊的假设。程序中能用到的栈操作有:push | pop |isEmpty最容易想到的就是优先队列来做此题,容易实现。另外我们可以再用一个栈来实现栈的升序排列。优先队列://优先队列来实现void sortStack(std::stack& vStk){ std::priority_queue, std::gr

2014-08-28 00:54:45 1684

原创 013使用两个栈实现一个队列(keep it up)

使用两个栈实现一个队列队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列则将第一个栈的数据依次压入第二个栈,然后出栈.两条规则:1)进队列,则直接压入第一个栈2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空,则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空

2014-08-27 00:53:22 1361

原创 012温习汉诺塔 (keep it up)

汉诺塔:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,应该怎么移动?汉诺塔是个非常经典的问题,讲递归时应该都会讲到它。如果我们没有递归的先验知识, 直接去解答这道题,常常会觉得不知道如何下手。用递归却可以非常优美地解决这个问题。使用递归的一个关键就是,

2014-08-25 00:29:32 1312

原创 011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)

实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值。 push,pop和min函数的时间复杂度都为O(1)。看到这个题目最直接的反应是用一个变量来保存当前栈的最小值,让我们来看看这样可行否?如果栈一直push那是没有问题,入栈元素如果比当前最小值还小,那就更新当前最小值。 可是如果pop掉的栈顶元素就是最小值,那么我们如何更新最小值呢?显然不太好办。

2014-08-22 21:22:39 1921

原创 010给定一个循环链表,实现一个算法返回这个环的开始结点 (keep it up)

给定一个循环链表,实现一个算法返回这个环的开始结点。定义:循环链表:链表中一个结点的指针指向先前已经出现的结点,导致链表中出现环。例子:输入:A -> B -> C -> D -> E -> C [结点C在之前已经出现过]输出:结点C可以用一个map 就解决问题了。下面是编程之美上一种奇特的解法:快慢指针解法。代码:

2014-08-22 19:51:09 2080

原创 009实现一个算法来删除单链表中的一个结点,只给出指向那个结点的指针(keep it up)

呵呵,这个题不能直接删除已知的结点,因为是单链表,不知道前驱,只知道后继结点,直接删除会使链表断开。不过我们可以删除已知结点的后继结点,把后继结点的值赋值给已知结点。#include struct Node{ int data; Node* next;};bool removeNode(Node* vNode){ if (vNode == NULL || vNo

2014-08-20 00:35:57 1309

原创 008实现一个算法从一个单链表中返回倒数第n个元素(keep it up)

我们维护两个指针, 它们之间的距离为n。然后,我将这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变。那么,当第二个指针指到空时,第一个指针即为所求。#include struct Node{ int data; Node* next;};void initList(Node* vNode){ for (int i=0; i < 20; ++i) {

2014-08-19 00:45:52 1557

原创 007 字符串(keep it up)

假设你有一个isSubstring函数,可以检测一个字符串是否是另一个字符串的子串。 给出字符串s1和s2,只使用一次isSubstring就能判断s2是否是s1的旋转字符串, 请写出代码。旋转字符串:"waterbottle"是"erbottlewat"的旋转字符串。简答题:#include #include bool isSubstring(const std::stri

2014-08-18 00:56:22 1346

原创 c结构体里的数组与指针

/*访问成员数组名其实得到的是数组的相对地址,而访问成员指针其实是相对地址里的内容*/struct buf_str{int  length;char buf[0];};struct foo{buf_str* pbuf;};void test_funny(){foo f = {0};printf("%x\n"

2014-08-16 11:05:32 1079

原创 006矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度。 你能原地进行操作吗?(即不开辟额外的存储空间)这个题第一感觉就是一次交换矩阵的元素:比如 3*3 矩阵1 2 34 5 67 8 9先处理第一行,一次逆时针旋转四个元素,下面是二次做的3 2 9          3 6 94 5 6          2 5 81 8 7

2014-08-15 20:59:02 1057

原创 005判断两个字符串是否是变位词 (keep it up)

写一个函数判断两个字符串是否是变位词。变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说, abbcd和abcdb就是一对变位词这也是简单的题。 我们可以排序然后对比, 也可以直接统计字符出现的个数来判断。这里给出统计字符来判断的代码:bool isAnagram1(const string& vLeft, const string& vRight){

2014-08-14 01:46:24 1608

原创 004字符串去重 (keep it up)

设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。简单题直接上代码:#include #include void remove_duplicate(char vStr[]){ int Len = strlen(vStr); if (!Len) { printf("the stri

2014-08-13 00:30:03 897

原创 003实现字符串反转reverse

这个简单就直接代码了//写代码翻转一个C风格的字符串。(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符)#include #include void swap(char& vLeft, char& vRight){ char Temp = vLeft; vLeft = vRight; vRight = Temp;}char* reverse(ch

2014-08-12 00:28:56 1106

原创 002 bitmap海量数据的快速查找和去重

题目描述给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用。如果你只有10MB的内存呢?

2014-08-10 22:51:58 5583 2

原创 001 unique string

以后坚持每个星期都写记到算法题,不论简单还是难,纯熟娱乐!描述:实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)代码:#include #include #include #include bool isUnique(const std::string& vStr){ if (vStr.size()

2014-08-10 10:43:23 981

原创 c++内存泄漏处理(积累)

写c++程序时,经常会出现内存泄漏的问题

2014-08-08 21:36:25 1411 1

原创 模板类的定义和实现可以不在同一个文件中

写c++程序时我们经常会把函数的定义写在xxx.h中,把函数的实现写在xxx.cpp, 但是当我们写带模版的函数和类时,这样写就会出现问题,如下:stack.h//stack.h#ifndef STACK_HPP#define STACK_HPP#include #include template>class CStack{public: void push(co

2014-07-13 16:35:48 2197

原创 写代码时常见的错误

实验室有要做阶段练习题了,其中有一道改bug题:#include #include int main(int, char**){ std::vector** ppRandomData = distributeRandomInt(100); for (unsigned int i=0; i<1000; i++) { if (ppRandomData[i]) { std:

2014-07-11 23:18:17 1294

原创 boost::string or boost::regex

有时候写代码时会遇到以下问题假设有一个文本文件,其包含内容类似于C语言,其中有一行如下格式的语句:layout (local_size_x = a,local_size_y = b, local_size_z = c) in;其中用蓝色标记出的部分(layout, local_size_x, local_size_y, local_size_z, in)

2014-07-11 22:49:32 1240

原创 关于序列化:把某个对象序列化成字节流

在网络编程中,一个经常的操作是将本地的数据块转换成字符流并将其发送到远端,远端将这个字符串流恢复成数据库。假设有如下一个类CObject,编写两个函数,分别将CObject中的成员变量转换为一个字符流(convert2Stream()函数),并将字符流的数据重新恢复到一个CObject对象中(convert2Object()函数):char* convert2Stream(const CObj

2014-07-11 22:01:57 1926

原创 boost::string 例题1

假设有一个语法正确的shader源文件,其包含若干关于uniform变量的定义。请写一个程序从某个shader源文件中提取其所有定义的uniform变量,要求记录其名称、数据类型和初始值(如果有定义),并且可以设计一个函数可以修改某个uniform变量的值。如下表所示,程序需要提取出一共6个uniform变量,并存放如某种数据结构中,其中3个有初始值,3个没有初始值,并且用户可以修改该数据结构

2014-07-10 22:45:09 1021

原创 c++模板元编程2

c++模板元编程第二章练习题2-0. 编写一个一元元函数add_const_ref,如果T是一个引用类型,就返回T,否则返回Tconst&。编写一个程序来测试你的元函数。提示:可以使用boost::is_same来测试结果。这个比较简单:template struct add_const_ref { typedef T const& type; }; templa

2014-05-07 23:44:37 2217 5

原创 meta program (1) swap_iter

开始学习模板元编程了#include #include #include #include #include "boost/assign/list_of.hpp"#include "boost/type_traits/is_const.hpp"#include "boost/type_traits/is_reference.hpp"#include "boost/type_tr

2014-05-07 14:03:20 1032

原创 boost::mpl::eval_if的用法

最近看boost的时候总是遇见这个eval_if,不知道啥意思,就没法看下去了,比如前篇文章boost::serialization 拆分serialize函数分析时就出现这样一段代码:templateinline void split_member(Archive & ar, T & t, const unsigned int file_version){ typedef BOOS

2014-05-05 23:37:53 3168

原创 怎样用boost::serialization去序列化派生模板类(续)

在怎样用boost::serialization去序列化派生模板类这篇文章中,介绍了序列化派生类模板类,在写测试用例时一直出现编译错误,调了很久也没跳出来,今天偶然试了一下...居然调了出来。先看看变异错误的代码(。。。看不出有错,可是编译就有错)。基类代码:class base_class{public: base_cla

2014-05-05 00:26:20 2393 1

原创 boost::serialization 拆分serialize函数

在前篇boost::serialization 用基类指针转存派生类(错误多多,一波三折)文中我们都是使用serialize函数来实现序列化,其代码格式如下:private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int

2014-05-04 21:38:33 3751

原创 BOOST_CLASS_EXPORT

用基类的指针去转存派生类时除了上一篇boost::serialization 用基类指针转存派生类(错误多多,一波三折)之外,还有另一种更简单的方法:用BOOST_CLASS_EXPORT宏。下面我们来分析怎样用BOOST_CLASS_EXPORT来实现用基类的指针去转存派生类。首先来看前面实例的一段代码:void save(){ std::ofstream ofs("t7.x

2014-05-04 00:21:00 3469

原创 怎样用boost::serialization去序列化派生模板类

本篇是boost::serialization 用基类指针转存派生类(错误多多,一波三折)的姊妹篇,这里只不过做一个总结。先来看一个基类class base_class{public: base_class(int m=0) : base_member_(0) {} virtual ~base_class() {} virtual void print_data() = 0;

2014-05-03 17:30:18 2421

原创 boost::serialization 用基类指针转存派生类(错误多多,一波三折)

boost::serialization 也支持c++的多态,这样我们就可以通过使用基类的指针来转存派生类,我们接着上一篇( boost::serialization(2)序列化基类)的例子来看:基类和派生类的代码如下:class student_info{public: student_info() {} virtual ~student_info() {} s

2014-05-03 14:56:54 3340

spring入门到精通完整版源码

spring入门到精通源代码,非常适合sping入门

2015-07-07

assimp--3.0.1270-source-only.zip

Assimp遵循BSD开源协议,可以拿来使用,修改,并可以用于商业用途,只是所造成的后果要自己承担。Assimp用C++写成,建议使用C++格式调用它的API。除C++以外,它也有C,Python,D接口。它也提供了命令行工具,可以快速执行一些如文件状态,模型转换,材质提取等操作。

2013-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除