C/C++基础
文章平均质量分 68
wesweeky
加油!
展开
-
深入理解C++的new
“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A{ int i;public: A(int _i) :i(_i*_i) {} void Say() { printf转载 2011-03-22 23:58:00 · 487 阅读 · 0 评论 -
Accelerated C++ 8.4迭代器
重写分割句子为单词的函数。#include #include #include #include #include #include #include using namespace std;bool space(char c){原创 2011-07-05 17:39:35 · 642 阅读 · 0 评论 -
Accelerated C++ 6.1查找URL
作为字符串处理的实例,编写一个查找URL的函数。URL格式: protocol-name://resource-name// 查找 URL#include #include #include #include using namespace std;bool not_url_char(char c){ // characters, i原创 2011-06-21 21:56:00 · 754 阅读 · 0 评论 -
关于stringstream的一些总结
C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。可以使用这些库来实现安全和自动的类型转换。如果你已习惯了风格的转换,也许你首先会问:为什么要花额外的精力来学习基于的类型转换呢?也许对下面一个简单的例子的回顾能够说服你。假设你想用sprintf()函数将一个变量从int类型转换到字符串类型。为了正确地完成这个任务,你必须确保证目标缓冲区有足够大空间以容纳转换完的字符串。此外,还必须使用正确的格式化符。如果使用了不正确的格式化符,会导致非预知的后果。下面是一个例子:int转载 2011-04-27 23:53:00 · 4754 阅读 · 0 评论 -
Accelerated C++ 7.4 生成句子
Well wrap up this chapter with a slightly more complicated example: We can use a map to write a program that takes a description of a sentence structure—a grammar—and generates random sentences that原创 2011-06-21 22:00:00 · 1571 阅读 · 1 评论 -
最长上升子序列问题
Longest Increasing Subsequence 求最长上升子序列个数 严格上升典型的DP 动态规划。#include #include using namespace std;struct Info{ int index; //序号 1 2 3... int value; //数值 int length; //以该值为终点的最长子序列长度 }; //Info结构体 保存一个终点信息Info info;vector V; //保存所有终点数据信息原创 2011-04-24 16:08:00 · 5475 阅读 · 0 评论 -
c++中的explicit关键字及隐式类型转换
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class MyClass{public:MyClass( int num );}...转载 2011-06-08 00:29:00 · 1672 阅读 · 0 评论 -
整数分划问题(递归与非递归)
<br />整数分划:<br />给定一个正整数 n , 一个由 r 个正整数组成的数组 λ = ( x1 , x2, . . . . , xr) 如果满足 x1 + x2 + ··· + xr = n 且 x1 ≥ x2 ≥ ··· ≥ xr ≥ 1, 就称数组 λ 是 n 的一个分划。n 的所有不同的分划的个数记作 p(n)。 <br />比如说 4 的分划 p(4) = 4 : <br /> 4 = 4 ; <br /> 4 = 3 + 1 ; <br /> 4 = 2 + 2 ; <br />原创 2011-05-24 13:20:00 · 1465 阅读 · 0 评论 -
彩色图像转灰度图
灰度图是指用灰度表示的图像,灰度是在白色和黑色之间分的若干个等级,其中最常用的是256级,也就是256级灰度图。灰度图在医学、航天等领域有着广泛的应用。bmp文件详解见本文最后,转http://blog.csdn.net/kesalin/archive/2006/09/12/1213163.aspx如何将一幅彩色图像转换为灰度图呢?根据人眼对红绿蓝三色的敏感程度,可以使用以下比例式进行转换: Gray = R*0.3+G*0.59+B*0.11这也是最常用的一种转换,另外还有一种常用的转换叫转载 2011-05-23 22:14:00 · 7808 阅读 · 1 评论 -
字符串的排列和组合
<br />题目:<br />输入一个字符串,打印出该字符串中字符的所有排列和所有组合。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。所有组合为:a、b、c、ab、ac、bc、abc。暂不考虑重复字符。<br />原创 2011-05-24 13:15:00 · 840 阅读 · 0 评论 -
ffs算法
<br />ffs函数 :类UNIX操作系统系统中的一个位运算函数。<br />int ffs(int i); 在i中,从最低位开始找出第一个设置位,返回第一个设置位的索引。如果i=0,返回0.<br />这里用到了分治的思想<br />int __ffs(int x){ int r = 0; if (!x) return 0; if (!(x & 0xffff)) { x >>= 16; r += 16;原创 2011-04-03 22:46:00 · 2097 阅读 · 0 评论 -
scanf/fscanf 的%[]和%n使用方法
标准输入输出函数%[]和%n说明符的使用方法 scanf fscanf,均从第一个非空格的可显示字符开始读起! 标准输入输出函数scanf具有相对较多的转换说明符,它常常作为入门级函数出现在各种教材中。但奇怪的是,[]和n这两种都为c89/c99所规定的标准说明符却鲜少在大多数教材中出现。虽然[]和n说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,尤其是[]说明符。 众所周之,scanf以空白字符为定界符,但如果输入的字符串是以其它字符为定界符的,那怎转载 2011-05-23 15:10:00 · 37566 阅读 · 8 评论 -
C++输入密码显示*
论坛上看到这个题目,记录一下:linux中输入密码不显示,这里写个小控制台程序,输入密码,显示*号,处理了退格键,其他特殊按键没考虑。// C++ 输入 密码 回显 * 的小程序段 #include #include#includeusing namespace std;class Password//用一个类实现,其实也可以不用这么麻烦,练习一下{ public: Password()//构造函数,这里主要用于初始化密码,使之为空 { psw="";//初始化密码原创 2011-05-23 17:34:00 · 11369 阅读 · 5 评论 -
浅谈getch(),getche(),getchar(),gets(),scanf()的区别
getch()和getchar()getchar()是C的标准库函数,包含在头文件中,而getch()和getche()需要的头文件是。conio.h不是C标准库中的头文件。conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作getchar This is a standard function that gets a character from the stdin.getch T转载 2011-05-23 14:25:00 · 10457 阅读 · 1 评论 -
从字符串中删除一些字符
逛论坛,看见一个问题:写一个函数void RemoveChars(char * src, char * remove),从一个字符串src中删除一些字符,既删除remove中包含的所有字符。动手写了写。利用状态数组flags,该数组的下标为字符的ASCII值,来存储字符的状态,如果是要被删除的字符,则相应的数组元素置为1。然后通过遍历原字符串,对其中的每个字符检查其对应数组元素的状态。此处状态数组可理解为一种hash关系。#include using namespace std;void R原创 2011-03-23 00:28:00 · 1052 阅读 · 0 评论 -
关于new/delete and malloc/free
<br /><br /> malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 <br /> 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 <br /> 因此C++语言需要一个能转载 2011-03-23 00:16:00 · 596 阅读 · 0 评论 -
深度搜索剪枝——生日蛋糕问题
Description:7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为N*pi的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 令Q = S*pi请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 (除Q外,以上所有数据皆为正整数)Input:有两行,第一行为N(N Output:仅一行,是一个正整数S(若无解则S = 0)。原创 2011-03-25 13:37:00 · 4913 阅读 · 0 评论 -
翻转字符串
<br />一道面试题,将“i am a student”翻转为“student a am i”,要求不用库函数。<br />思路:首先对字符串整个翻转,然后在翻转后的字符串中对每个单词翻转,只用写一个翻转函数即可;<br />#include <iostream>using namespace std;int GetLength(char *str){ int Length=0; while(str[Length++]!='/0'); return Length-1;}vo原创 2011-03-24 22:55:00 · 814 阅读 · 0 评论 -
Accelerated C++ 10.1
指针、数组、main参数 、读写文件、简单内存管理#include #include #include #include #include #include using namespace std;int (*fp)(int); //函数指针原创 2011-07-05 22:27:47 · 832 阅读 · 0 评论