C/C++
文章平均质量分 57
qiudaowen
这个作者很懒,什么都没留下…
展开
-
scanf函数的用法
<br /><br />很多编程初学者在用scanf()函数的过程当中遇到不少的问题。比如:1:想要输入一个含有空格,tab键的字符串,该怎么办呢?2:当一不小心输入的数据与输入的格式不匹配,该如何从新输入呢?<br /> 1: 对于第一个问题,很多人想直接通过scanf("%s",str); (str是一字符指针); 你会发现空格或者tab键后面的字符串并没有输入到str中。这是因为scanf遇到空格就默认为一个数据输入的结束。为了解决这个问题,我们可以用%[]的格式输入。例如:<br />#inc原创 2011-03-20 20:56:00 · 224 阅读 · 0 评论 -
函数对象
[STL]函数对象/仿函数 提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函数对象(Function Object,JJHou译作Func转载 2012-09-21 08:33:31 · 467 阅读 · 0 评论 -
new & delete
C++里允许用户通过自定义operator new的方式来更改new表达式的行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的问题。 operator new和operator delete都有其正规形式(normal signature):转载 2012-09-21 08:16:24 · 259 阅读 · 0 评论 -
注册C函数在main函数前执行
定义一个C函数:void CInit(){ atexit(CExit); printf("4\n");}将一CInit函数指针存放到 ".CRT$XC*"段中 (*为B-Y之间)typedef void (__cdecl *PVFV)();#pragma section(".CRT$XCD", long, read)__declspec(allocate(".C原创 2012-09-20 21:28:43 · 5840 阅读 · 0 评论 -
简单的程序效率分析工具
QcFunctionProfiler.h:#ifndef QC_FUNCTION_PROFILER_H#define QC_FUNCTION_PROFILER_H/*** 这工具用于分析多程序片段运行的时间.** ** 用法:** 1) 用宏PROFILER_FUNCTION_ON() 打开分析开关** 2) 在需要分析片段的前后分别加上 PROFILER_FU原创 2012-08-31 09:37:44 · 317 阅读 · 0 评论 -
连续序列最大和
<br />int arrayNum[] = {-2,1,-4,6,-5, 10,-1, 4,-1,2,-5,10,-7,-1,-1,-50};<br />int GetMaxSum(int* pNum, int n)<br />{<br /> int SecondMax = pNum[0];<br /> int Max = pNum[0];<br /> int beginIndex = 0;<br /> int endIndex = 0;<br /> int i = 0;<b原创 2011-04-06 22:16:00 · 206 阅读 · 0 评论 -
防止类被派生
<br />可以通过虚拟继承来实现此功能。<br />建立一个辅助类Assistant,不包含有任何数据,仅仅是将构造函数私有化,设置目标类TargetClass为友元类。让目标类TargetClass派生于辅助类TargetClass。如下:<br />classAssistant<br />{<br /> friendclassTargetClass;<br />private:<br /> Assistant(){}<br />};<br /> <br />classTarget原创 2011-04-05 13:33:00 · 189 阅读 · 0 评论 -
修改基类访问权限
<br />问题:我们经常扩展别人写好一个类的功能,为了防止别人错误地使用我们扩展的功能,我们需要屏蔽直接调用原基类的功能。例如:<br />classbase{ <br />public:<br /> voidDo(){}<br /> voidAdd(base* pBase){} <br /> voidRemove(base* pBase){}<br />};<br />//我们扩展base的Add, Remove功能,在这两个函数里需要处理一些derive原创 2011-04-05 13:31:00 · 379 阅读 · 0 评论 -
输出小于某个数的所有质数
<br />void PrimeNumberArray(int number)<br />{<br /> if (number > 1)<br /> {<br /> number += 1;<br /> int* pNumberArray = (int*)malloc(sizeof(int) * number);<br /> for (int i=0; i<number; i++)<br /> {<br /> pNum原创 2011-04-05 10:27:00 · 310 阅读 · 0 评论 -
整数拆分N个数的和
<br />例如:<br />4=1+1+1+1;<br />4=1+1+2;<br />4=1+3;<br />4=2+2;<br />4=4;<br /> <br />代码实现:<br />int buf[50] = {0};<br />int num = 10;<br />void separateNumber(int number, int nPart, int nIndex)<br />{<br /> if (nPart == 1)<br /> {<br /> buf[n原创 2011-04-03 21:18:00 · 1134 阅读 · 0 评论 -
强制友元法
<br /> 很多时候我们都是基于一些别人写好的库来实现我们的功能,然而有时我们是很有需要修改一些库开发者不期望被修改的代码时.例如:<br />Class CObject1<br />{<br />Friend class object2;<br />Protected:<br /> Int m_value;<br />}<br />Class CObject2<br />{<br />Public:<br />Vitrual Void DoSomething()<br />{<b原创 2011-04-03 11:21:00 · 167 阅读 · 0 评论 -
输出一个序列的全排列
<br />int arrayNum[] = {1,2,3,5};<br />void printArray(int nIndex)<br />{<br /> int n = sizeof(arrayNum) / sizeof(arrayNum[0]);<br /> int temp = arrayNum[nIndex];<br /> //递归到最后一个元素,输出<br /> if (nIndex == n -1)<br /> {<br /> for (int j原创 2011-04-03 10:11:00 · 246 阅读 · 0 评论 -
C/C++之反转链表
<br />1)<br />node* resver(node* pNode)<br />{<br /> node* pPre = NULL;<br /> node* pCurrent = pNode;<br /> node* pNext = NULL;<br /> while (pCurrent)<br /> {<br /> //先保存当前结点的下一结点<br /> pNext = pCurrent->pNext;<br /> pCurrent->pNext = pPre;<br /> //将链表原创 2011-04-03 08:40:00 · 697 阅读 · 0 评论 -
单件模板
<br />单件在实际开发过程中用的很多。就类似C中的全局变量一样。下面介绍两种单件的写法:<br />第一种:使用模板<br />template <class T><br />class QcSingleton<br />{<br /> friend typename T;<br />private:<br /> QcSingleton(){}<br />public:<br /> ~QcSingleton(){}<br /> static T* GetInstance()<br /> {<br />原创 2011-05-17 22:44:00 · 217 阅读 · 0 评论 -
函数对象的简单应用
在一些管理系统中,经常需要对这种那种属性进行比较排序。可以通过stl容器跟函数对象将代码写的非常简洁。简单的事例: #include #include #include using namespace std;struct StudentInfo{public: struct SortHelper { enum SortField {原创 2012-09-26 15:36:59 · 315 阅读 · 0 评论