上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 23 下一页
摘要: 一、STL 概述1.1 C++标准库高级程序设计语言希望尽可能减少程序员的重复工作,因此提供了各种抽象机制降低程序复杂性。在程序设计实践中积累了许多经验和代码,充分利用这些经验和代码是降低程序复杂性的有效途径。程序设计语言必须提供代码重用的机制。一般而言有源代码级别的重用和二进制代码级别的重用两种机制,源代码级别的重用非常简单,只需要将源代码一起编译即可。但是许多时候源代码丢失或者厂商不愿意公开源代码,只有二进制代码可用,此时程许多程序设计语言提供了标准库和相应的库管序设计语言应该提供重用二进制代码的机制。理机制,通过标准库用户可以使用常用的算法和数据结构,通过库管理机制用户可以使用第三方的库 阅读全文
posted @ 2012-06-16 16:18 Mr.Rico 阅读(3904) 评论(0) 推荐(1)
摘要: 排列组合是常见的一个问题。1. 排列算法这个主要采用递归的方法来解决。具体代码如下:voidswap(int&a,int&b){if(a==b)return;intt=a;a=b;b=t;}voidperm(intarr[],intk,intm){if(k==m){copy(arr,arr+m+1,ostream_iterator<int>(cout,""));cout<<endl;}else{for(inti=k;i<=m;++i){swap(arr[i],arr[k]);perm(arr,k+1,m);swap(arr[i] 阅读全文
posted @ 2012-06-02 16:00 Mr.Rico 阅读(997) 评论(0) 推荐(1)
摘要: 首先,先看看如何对数字进行循环移位C语言中没有提供循环移位的操作符,但可以通过简洁的方式实现循环移位,主要使用移位操作来实现。设一个操作数x有s位则循环左移n位的操作为: (x << n) | (x >> (s - n)); 同理右移n位位:(x >> n) | (x << (s - n));实际编程中可以用宏定义实现循环移位: #define ROTATE_LEFT(x, s, n) ((x) << (n)) | ((x) >> ((s) - (n))) #define ROTATE_RIGHT(x, s, n) ((x 阅读全文
posted @ 2012-05-20 16:26 Mr.Rico 阅读(2605) 评论(0) 推荐(0)
摘要: 今天在网上看到这个问题,自以为的输出是3.0,但是实际去跑一下,可以发现结果是0.0000这一句虽然不长,但是其中蕴涵的知识点是很多的。第一,10/3的结果是什么?这个很显然结果应该是3第二,printf语句格式化输出的使用%f就是要输出浮点数,但是我们也发现给的参数其实是个整型数。所以也就出现了上面的结果。第三,printf的原理是什么?这儿就牵扯到C中的不定参数的使用方法。具体可见这儿 简单来说就是,printf从栈中取参数的时候是根据格式化语句中要求进行取数的。这儿是%f,而浮点数是4个字节(32位操作系统),所以,要从栈中取4个字节,并且是按“浮点数的方式”。正好,参数3是个整型数,. 阅读全文
posted @ 2012-05-18 20:08 Mr.Rico 阅读(2901) 评论(1) 推荐(0)
摘要: 题目:要求一个数组连续下标和的最大值,数组的元素可正、可负、可为零,例如-2,5,3,-6,4,-8,6将返回8。这题是很经典的一道面试题,也有各种解法,从算法分析上,时间复杂度也有很大差别,下面我就给出三种不同的解法。方法一:暴力枚举法此种方法最简单,我想应该也是每个人拿到题目想到的第一种解法了,学过一点编程的人都应该能编出此类程序。记sum[i..j]为数组中第i个元素到第j个元素的和(其中0<=i<j<=n-1),通过遍历所有的组合之和,就能找到最大的一个和了。伪代码如下:int maxSubArray(int *A,int n) { int maxium = -INF 阅读全文
posted @ 2012-05-17 15:21 Mr.Rico 阅读(13643) 评论(2) 推荐(3)
摘要: 计算某一天是星期几的公式如下: W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D.其中Y是年份,D是改天是Y年的第几天。具体的解释见这儿 具体代码如下:#include<iostream>#include<string>#include<sstream>usingnamespacestd;constintMONTH[12]={31,28,31,30,31,30,31,31,30,31,30,31,};conststringWEEK[]={"SUN","MON", 阅读全文
posted @ 2012-05-17 00:00 Mr.Rico 阅读(610) 评论(0) 推荐(0)
摘要: 为栈实现高效的max操作 题目: 请设计一个栈,除了提供push(压栈),pop(出栈),peak(取栈顶元素)操作以外,还能提供max(取栈中最大值)的功能,并使得时间复杂度最小。注:请仔细思考后再看下面的答案1. 方案一(不可行)设计一个成员max,等于栈中最大的元素,在每次push操作后,新压入的元素与max比较,然后将max赋值为它们中的大的元素值。这样,max函数则返回max。问题:如果栈中等于max的元素pop出去后,该max就不是栈中的最大值了。2. 方案二(可行,效率太低)在【方案一】的基础上改进,每当栈中等于max的元素pop出去后,则把剩余元素依次pop到临时数组,找出最大 阅读全文
posted @ 2012-05-16 22:51 Mr.Rico 阅读(1370) 评论(0) 推荐(0)
摘要: 交换两个整型数是C/C++中最常见的操作。实现这个操作的方法很多。最基本的方法就是使用一个临时变量,具体的代码如下:inta,b;inttmp;tmp=a;a=b;b=tmp;如果以函数的形式写出来的话就是:voidswap(int*a,int*b){inttmp;tmp=*a;*a=*b;*b=tmp;}在C++中,可以使用引用来实现的比较优雅:voidswap(int&a,int&b){inttmp;tmp=a;a=b;b=tmp;}另外,还经常出现的一种情况是不使用临时变量来交换两个整型数,一般常见的方法有两种:加法和异或运算,具体如下表所示: ... 阅读全文
posted @ 2012-05-16 20:38 Mr.Rico 阅读(13715) 评论(2) 推荐(3)
摘要: 总结一下一些常用的计算平方根的方法1. 牛顿法具体的做法如下: 计算公式如下:具体的计算程序如下: doublesqrt_(doublex){doubleg=x;while(ABS(g*g-x)>0.000001){g=(g+x/g)/2;}returng;}2. 利用级数进行逼近微积分中的泰勒级数如下:这样,有了这个公式我们可以得到求平方根公式的展开式: 这样我们可以进行在一定精度内的逼近。但是这儿存在一个问题,就是这个公式的收敛问题。它是存在收敛区间的。 所以可以得到最后的代码:doubleTsqrt(doublex)//计算[0,2)范围内数的平方根{doublesum,coffe 阅读全文
posted @ 2012-05-15 22:34 Mr.Rico 阅读(38923) 评论(0) 推荐(0)
摘要: C语言提供类似于矩阵的多维数组,在一些进行数学运算的程序中会经常用到。从形式 上看多维数组是由多个一维数组组成的,但C语言处理多维数组的方法和一维数组一样,都是线性存储,连续分配存储空间,可以用带偏移量(offset)的一 维数组来访问多维数组。而在数组规模不确定的情况下,就需要用malloc函数动态分配存储空间。这里的数组规模不确定指的是数组的维数确定,而每一维的 元素个数是不确定的。例如根据用户输入的行数和列数来确定一个二维数组。下面使用两种方式来进行二维数组分配:对应的代码如下: #include<stdio.h>#include<stdlib.h>#define 阅读全文
posted @ 2012-05-14 11:01 Mr.Rico 阅读(1111) 评论(0) 推荐(0)
摘要: 1. 存储及退出文件:wq或者:x 存文件,并且退出viZZ 保存并退出(:x 表示仅在需要时保存,ZZ不需要输入冒号并回车) ZZ = wqZQ 无条件退出:e filename 打开文件filename进行编辑[相当于退出当前的并打开另一个文件]:e! 放弃修改文件内容,重新载入该文件编辑:e 重新载入【类似刷新】ctrl+z/fg 暂时挂到后台/跳回编辑页面:f 或 Ctrl-g 显示文件名及一些其他信息:!command 暂时退出vi并执行shell指令,执行完毕后再回到vi:r!command 将命令command的输出结果放到当前行【强大】vim -x exam.txt 新编辑的文 阅读全文
posted @ 2012-05-11 22:07 Mr.Rico 阅读(1118) 评论(0) 推荐(0)
摘要: c++类的构造函数详解 一、 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private: // 数据成员 int m_value; } 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg:Counter c1; 编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter( )自动地初始化对象c1的m_value... 阅读全文
posted @ 2012-05-11 17:50 Mr.Rico 阅读(96417) 评论(11) 推荐(17)
摘要: 使用Memoization,以避免递归重复计算考虑Fibonacci(斐波那契)问题;Fibonacci问题是可以通过简单的递归方法来解决:intfib(n){if(n==0||n==1){return1;}else{returnfib(n-2)+fib(n-1);}}注:在这里,我们考虑Fibonacci 系列从1开始,因此,该系列看起来:1,1,2,3,5,8,... 注意:从递归树,我们计算fib(3)函数2次,fib(2)函数3次。这是相同函数的重复计算。如果n非常大,fib这个简单的技术叫做Memoization,可以被用在递归,加强计算速度。fibonacci 函数Memoizat 阅读全文
posted @ 2012-05-08 10:39 Mr.Rico 阅读(4510) 评论(0) 推荐(0)
摘要: 部分内容来自互联网: 【问题描述】对于一个栈,已知元素的进栈序列,判断一个由栈中所有元素组成的排列是否是可能的出栈序列。 比如,进栈序列为1 2 3 4,则可能的出栈序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。 【输入形式】从标准输入读取第一行是一个整数N(3≤N≤10),代表有N个元素,其进栈序列是1 2 3 …… N。 第二行是空格分隔的1~N的数字的一个排列。 【输出形式】向标准输出打印结果。如果该排列是可能的出栈序列,则打印“YES”, 否则打印“NO”。在行末要输出一个回车符。 【输入样例】 3 3 1 2 【输出样例】 NO 【样例说明】进栈序列为1 2 3.. 阅读全文
posted @ 2012-05-07 15:07 Mr.Rico 阅读(2042) 评论(0) 推荐(0)
摘要: 1.linux 链接库介绍在linux系统中,可将多个目标文件打包成库文件,以便在编程时随时调用,而不必重新编写或定义,这种包称为库函数。库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的。它们通常由一组互相关联的用来完成某项常见工作的函数构成。比如用来处理屏幕显示情况的函数(curses库)等。 1.基础知识:linux下GCC在编译程序时要经历预处理,编译,汇编和连接四个阶段。 (1). 预处理阶段,主要处理#include和#define,它把#include包含进来的.h 文件插入到#include所在的位置,生成.i文件; (2). 编译阶段,是最重要的阶段,在 阅读全文
posted @ 2012-05-01 21:55 Mr.Rico 阅读(3708) 评论(1) 推荐(2)
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 23 下一页