随笔分类 -  C++

摘要:今天被问到一个问题,如何用scanf将 hello-my-world中的三个单词, hello my world 分别放到三个char数组中去于是用到了scanf中的[][ ] 扫描字符集合,比如“%[^\n]”可以打印除“\n”之外的所有字符于是程序就出来了 char str1[30]="",str2[30]="",str3[30]=""; scanf("%[^-]-%[^-]-%s",str1,str2,str3); printf("\n\nstr1=%s\n\nstr2=%s\n\nstr3=%s& 阅读全文
posted @ 2013-11-01 12:40 三更_雨 阅读(200) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/hbt19860104/archive/2012/10/10/2717873.html以及 http://zhaoweizhuanshuo.blog.163.com/blog/static/14805526220108545937329/当运算符new找不到足够大的连续内存块来为对象分配内存时将会发生什么?一个称为 new-handler的函数被调用。对于new-handler的缺省动作是抛出一个异常。然而,如果我们在程序里用堆分配,至少要用“内存已用完”的信息代替 new-handler,并异常中断程序。用这个办法,在调试程序时会得到程序出 阅读全文
posted @ 2013-08-04 20:15 三更_雨 阅读(435) 评论(0) 推荐(0)
摘要:转自: http://blog.csdn.net/classfactory/article/details/87749C++ 中的枚举类型继承于 C 语言。就像其他从 C 语言继承过来的很多特性一样,C++ 枚举也有缺点,这其中最显著的莫过于作用域问题——在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型。例如下面的示例:enum FileAccess { Read = 0x1, Write = 0x2,};FileAccess access = ::Read; // 正确FileAccess access = FileAccess::Read; // 错误C++枚举的这个特点 阅读全文
posted @ 2013-07-23 19:50 三更_雨 阅读(530) 评论(0) 推荐(0)
摘要:原帖: http://hi.baidu.com/yuleishou/item/caacae872190031ec216272f表示在vs2008下实验了一下,有些东西和原帖的还是不一样的,都贴在这里了。1、枚举enum的用途浅例 写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等。 更常见的,打开一个文件可能有三种状态:input, output和append. 典型做法是,对应定义3个常数,即:const int input = 1;const int output = 2;con.. 阅读全文
posted @ 2013-07-23 19:44 三更_雨 阅读(333) 评论(0) 推荐(0)
摘要:看编程珠玑,然后里面有提到随机数,于是小搜了一下,主要来自于这篇文章,然后自己的试验也写在里面了。http://www.cppblog.com/Niino/archive/2008/08/16/59042.html标准库(被包含于中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看:1 阅读全文
posted @ 2013-06-29 12:14 三更_雨 阅读(511) 评论(0) 推荐(0)
摘要:看了这篇文章后了解了,但是文章中的例子比较特别,我在这里加个注释好了。http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html单井号就是将后面的 宏参数 进行字符串操作,就是将后面的参数用双引号引起来双井号就是用于连接。比如文章中的例子:#definePRINT(NAME)printf("token"#NAME"=%d\n",token##NAME)调用时候使用: PRINT(9);宏展开即为: printf("token"#9"=%d\n&quo 阅读全文
posted @ 2013-05-11 18:02 三更_雨 阅读(5207) 评论(0) 推荐(0)
摘要:照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'undefined reference to 'pthread_join'问题原因:pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。问题解决: 在编译中要加 -lpthread参数 gcc thread.c -o thread -lp 阅读全文
posted @ 2013-05-03 09:23 三更_雨 阅读(374) 评论(0) 推荐(0)
摘要:关于函数参数的入栈顺序,个人觉得这个例子很好,是一道笔试题目转自:http://www.cnblogs.com/AnnieKim/archive/2011/05/16/2048062.htmlvoid out(char *ch, int i) { cout<<ch<<","<<i<<endl; } int main() { vector<char *> vec; vec.push_back("str1"); vec.push_back("str2"); int i=0; ou 阅读全文
posted @ 2013-05-02 16:57 三更_雨 阅读(239) 评论(0) 推荐(0)
摘要:来自:http://www.cppblog.com/oosky/archive/2006/01/21/2958.html非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是 阅读全文
posted @ 2013-05-02 16:21 三更_雨 阅读(224) 评论(0) 推荐(0)
摘要:一般认为c中的static函数只的就是静态函数,也就是只能在该文件中被调用,其他的文件不能调用这个函数,而不加static的函数,就可以在别的文件中调用。本来以为就这么点区别,但是,今天看了一本书,原来这个区别还能导致如下的一种情况,做个记录。若一个内联函数的定义没有使用关键字static,那么gcc就会假设其他程序文件中也对这个函数有调用,因此,一个非静态内联函数总是会被编译出自己的汇编代码来。 阅读全文
posted @ 2013-03-14 20:05 三更_雨 阅读(1164) 评论(0) 推荐(1)
摘要:《深度探索C++对象模型》P67最下面说道:这个程序的第一个版本不能实施NRV优化,因为test class 缺少一个copy constructor.看了一下程序,这个NRV优化和copy constructor木有关系的说啊,所以为什么没有copy constructor就不能进行NRV优化了呢。搜了一下,结果很坑爹,就是 侯捷也不知道,Lippman也没有给出答案,而且这个也没有写入C++标准,各个编译器表现不一致。记录一下吧。主要参考:http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FCPlusPlus%2Fte 阅读全文
posted @ 2012-11-26 23:50 三更_雨 阅读(1567) 评论(1) 推荐(2)
摘要:以下代码体现了书中所说的如下几个知识:1. 如果一个class没有任何constructor,但它含有一个member object, 而后者有default constructor,编译器需要为该class合成出一个default constructor。(P41)2. 如果 类中的default constructor已经被显示的定义出来,编译器没办法合成第二个,编译器会采取什么行动呢。编译器会扩张已存在的constructors, 在其中安插一些代码,使得 user code 被执行前,先调用必要的default constructors。(P42)3. 当class内含一个menber 阅读全文
posted @ 2012-11-21 21:27 三更_雨 阅读(325) 评论(0) 推荐(0)
摘要:关于这个问题,第一遍看的时候比较晕,不知道这个什么 bitwise copy是个什么东西,其实很简单,就是 位逐次拷贝(我靠,一句好犀利的废话)。额,具体来说呢,就是对 源类中的成员变量 中的每一位 都逐次 复制到 目标类中。具体的内容接着看。首先让我们看看这个概念是怎么出来的。书中第50页的时候说到:Default constructors 和 copy constructors 在 必要的时候 才由编译器产生出来这个句子中的“必要”意指当class不展现bitwise copy semantics时。这段话的意思呢,应该是这么个意思: 如果class中出现了bitwise copy sem 阅读全文
posted @ 2012-11-21 20:41 三更_雨 阅读(2918) 评论(1) 推荐(1)
摘要:和 成员变量 的情况一样,如果类中有基类,那么调用 基类构造 函数的顺序和和声明的顺序一致。代码如下:class A1{public: A1(){cout<<"A1 construction"<<endl;}};class A2{public: A2(){cout<<"A2 construction"<<endl;}};class A3: public A1, public A2//注意,这里为声明的顺序{public: A3(){ A2::A2(); A1::A1(); cout<<" 阅读全文
posted @ 2012-11-21 18:59 三更_雨 阅读(273) 评论(0) 推荐(0)
摘要:书中第43页中有如下描述:如果有多个class member objects 都要求constructor 初始化操作,将如何?C++语言要求以 “memeber objects 在class中的声明顺序”来调用各个constructors。也就是说 一个类中的 数据成员 的声明顺序决定了,他们的构造顺序。具体代码如下:class A1{public: A1(){cout<<"A1 construction"<<endl;}};class A2{public: A2(){cout<<"A2 construction"& 阅读全文
posted @ 2012-11-21 18:53 三更_雨 阅读(240) 评论(0) 推荐(0)
摘要:在inside the c++ object model中看到一段话:例如把单一元素的数组放在一个struct的尾端,于是每个struct objects可以拥有可变大小的数组。 按照书中的意思,这个方法在c中是一个小技巧,于是查了一下,找到了柔性数组这么个东西,内容如下转自:http://blog.csdn.net/yiruirui0507/article/details/5756328也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成 阅读全文
posted @ 2012-11-18 22:00 三更_雨 阅读(254) 评论(0) 推荐(0)
摘要:描述摘自网络:http://www.cnblogs.com/dolphin0520/archive/2011/10/11/2207886.htmlTrie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总共有26个英文字母(假设单词都是小写字母组成)。 则可声明包含Trie树的结点信息的结构体:struct TrieNode{ bool ... 阅读全文
posted @ 2012-10-30 12:28 三更_雨 阅读(283) 评论(0) 推荐(0)
摘要:老题了。既然又写了遍就记录下#include <iostream>#include <cassert>using namespace std;int maxSum(int* arr, int length){ assert(arr!=NULL); assert(length >=0); int sum = 0; int max = 0; for(int i=0; i<length; i++) { sum = sum + arr[i]; if(sum < 0) sum = 0; if(max < ... 阅读全文
posted @ 2012-10-29 19:47 三更_雨 阅读(169) 评论(0) 推荐(0)
摘要:将字符串进行如下反转: 如果字符串为 how are you则反转为 you are how也就是单词反转,但是每个单词内部不变。两个解法,第一个是根据空格把每个单词弄出来,保存起来,然后反转就好了第二种,先反转整个句子,之后,再对每个单词在进行一次反转。代码如下:#include <iostream>#include <string>#include <cassert>using namespace std;void reverseRange(char* str,int begin,int end){ assert(str != NULL); assert 阅读全文
posted @ 2012-10-29 00:38 三更_雨 阅读(1661) 评论(0) 推荐(1)
摘要:题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。主要是参考了一下两篇文章:http://blog.csdn.net/qitian0008/article/details/8042558http://www.cnblogs.com/eric-blog/archive/2012/05/03/2481510.html其中常规的方法,就是用一个i从左到右进行遍历,当i指向某个值的时候,以i为中心,逐个比较左右两个的字符是否相等。这样就可以找到一个回文,以及他的长度。但是,这样做的时候,是有重复计算 阅读全文
posted @ 2012-10-28 23:00 三更_雨 阅读(1010) 评论(0) 推荐(0)