随笔分类 - c++
摘要:用winsocket时,send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,可以设置收发时限:int nNetTimeout = 1000; //1秒//发送时限setsockopt( socket, SOL_SOCKET, SO_SNDTIMEO, ( char * )&nN...
阅读全文
摘要:这两天正在将之前的一款cocos2d游戏,移植到wp平台上,这里记录一下所遇到的问题以及解决方法。我是用的cocos2d下面的例子程序进行修改的。遇到的第一个问题是资源路径的问题,当时我把解决方案下面的Assert删除后自己又新建了Resources目录,但是导入资源时选择了与Classes同级目录...
阅读全文
摘要:今天偶尔看到了一个算法问题(八皇后问题),回想一下还是在算法课上学习过的,于是,自己总结了一下,写了这篇日志算法提出:在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且指出各种不同的放法。算法思路: 首先我们分析一下问题的解,我们每取出一个皇后,放入一行,共有八种不同的放法,然后再放第二个皇后,同样如果不考虑规则,还是有八种放法。于是我们可以用一个八叉树来描述这个过程。从根节点开始,树每增加一层,便是多放一个皇后,直到第8层(根节点为0层),最后得到一个完全八叉树。 紧接着我们开始用深度优先遍历这个八叉...
阅读全文
摘要:排序是计算机应用中的一个非常重要的操作。平常我们总会听到一些算法,但是我们总是似懂非懂的写着代码,今天我将一般常见的排序算法进行一个总结。本次总结只涉及内部排序(所谓内部排序是指在内存中进行的排序)首先说一个概念:稳定排序与非稳定排序如果一个序列中原来相同的元素,排序完成后,仍然保持着原来的顺序,那么就成为稳定排序,反之就是非稳定排序。 插入排序 (1).直接插入排序(Straiht Insertion Sort) 算法描述:如果有一个已经排好序的序列 {R(20),R(35),R(88)},当要插入一个R(66)时,需要与各...
阅读全文
摘要:今天在stackoverflow上看到有一个这样提问说下面这段程序第二个输出语句有问题#include <stdio.h>#include <stdlib.h>#include <string.h>class C {public: char* s; C(char* s_) { s=(char *)calloc(strlen(s_)+1,1); strcpy(s,s_); }; ~C() { free(s); };};void func(C c) {};void main() { C o="hello"; pri...
阅读全文
摘要:今天看完了set,multimap,multiset关联容器,回顾一下:首先set容器与map不同的是set中value_type类型不是pair类型,而是key_type类型,没有了与map对应的mapped_type,与map不同的还有不支持下标操作。set容器由于只有键值,所以适合作为排除集使用。multimap 与 multiset顾名思义,是多值的map容器与set容器,也就是一个键值对应多个值。对于multimap与multiset的删除操作,由于一个键对应多个项目,所以带有一个键参数的erase函数会删除跟这个键关联的所有元素。但是带有迭代器或迭代器范围的erase函数只会删除迭
阅读全文
摘要:转载http://hi.baidu.com/%B3%CF%D5%F7id/blog/item/56b040fc9dad621a08244d21.htmlParser Generator的使用说明2010年05月13日 星期四 18:35parser generator的使用方法这里只以vc6.0为例,首先打开parser generator编辑器,选择Project->LibBuilder在LibBuilder对话框中选中Visual C++(32-bit),按属性键Properties后确以下设置Script file name.\Cpp\Script\msvc32.lbsNameVi
阅读全文
摘要:Map容器,顾名思义,地图,是用来进行索引的一个容器。在定义Map容器之前,c++首先定义了一个pair类型,这个类型有两个参数pair<T1,T2>。 pair类型的对象通过点号(.)访问其成员(都是公有成员)first与second。 pair类型可以通过make_pair()函数来进行初始化。下面定义map类型的对象 map<string ,int> objmap;//这个语句定义了一个空的map对象,其中string类型的为索引,int类型的为其值。对于自定义类型作为键类型,特别要注意的是自定义类型必须定义<这个操作符。并且必须是严格弱排序。也即两个键比较
阅读全文
摘要:不管是在c++,还是c#,或是java中,当人们一提到构造函数是,马上就回有人回答,是用来初始化成员变量的,没错,但是殊不知,后面却隐含了很多东西。首先:构造函数用初始化式与在函数里面直接初始化有什么不同。我先简单说一下初始化式,可能有人已经忘了什么是构造函数的初始化式。其实初始化式就是一个以冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟着一个放在圆括号里的初始化式。而初始化式只能在构造函数的定义中而不能再声明中指定。如:class A{ public int a,b; public string c; A(const string &s):a(3),b(4),c(s
阅读全文
摘要:不用AuxDIBImageLoad()向opengl中载入bmp纹理 这个函数从硬盘中加载24位window DIB 位图。呵呵,解释的多了。为了节约时间,我没有加载整个bmp图的Header部分,而仅仅获取我们需要的部分:宽度,高度,和图片大小。 下面是代码部分unsigned int LoadTex(string Image){ unsigned int Texture; FILE* img = NULL; img = fopen(Image.c_str(),"rb"); unsigned long bWidth = ...
阅读全文
摘要:c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相应的操作转化,下面就是这一转化过程。 c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。与C语言的其他部分一样,它在c++的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。 标准头文件<cstring>包含操作c-串的函数库。这些库函数表达了我们希望使用的几乎每种字符串操作。 当调用库函数,客户程序提供的是string类型参数,而库函数内部实现用的是c-串,因此需要将string对象,转化为char*对象,而c_str()提供
阅读全文
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没
阅读全文
摘要:转载自网站http://www.vckbase.com/document/viewdoc/?id=950,谢谢原作者提供。虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点,写这篇文章只是想和大家交流学习经验因为本人学识浅薄,难免有一些错误和不足,希望大家批评和指正,在此深表感谢! 一、 基本概念 首先,C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接手消息的对象而变&qu
阅读全文
摘要:(1)GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR属性。这三个属性与光源的三个对应属性类似,每一属性都由四个值组成。GL_AMBIENT表示各种光线照射到该材质上,经过很多次反射后最终遗留在环境中的光线强度(颜色)。GL_DIFFUSE表示光线照射到该材质上,经过漫反射后形成的光线强度(颜色)。GL_SPECULAR表示光线照射到该材质上,经过镜面反射后形成的光线强度(颜色)。通常,GL_AMBIENT和GL_DIFFUSE都取相同的值,可以达到比较真实的效果。使用GL_AMBIENT_AND_DIFFUSE可以同时设置GL_AMBIENT和GL_DIFFUSE属性。 (
阅读全文
摘要:题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { char * strDestCopy=strDest; //[3] if ((strDest==NULL)||(strSrc==NULL)) //[1] throw "Invalid argument(s)"; //[2]
阅读全文
摘要:此文转自别人博客,感谢原作者1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表 void foo(...); void foo(parm_list,...);2:函数参数的传递原理 函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:先介绍一下可变参数表的调用形式以及原理: 首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下: void func(int x, float y, char z); 那么,调用函数的时候,实参 char z 先进栈,然后是 float y,最后是 int x,因此
阅读全文
摘要:第一: //////////Visula C++ 6.0环境 #include<iostream.h>void main(){int a=3;int *p=new int;p=&a;cout<<*p<<endl;delete p; /////////有错误} 第二: //////////Visual C++ 6.0环境 #include<iostream.h>void main(){int a=3;int *p=new int;*p=a;cout<<*p<<endl;delete p;}其中第一个程序存在错误(会生
阅读全文
摘要:今天下午将cocos2d的win32版本配置好了。引述官网的教程。自己有点心得,学会看英文文档。Chapter 1 - How to Create a New cocos2d-x project on multi-platformsToday we will start a tutorial on how to port the famous Cocos2dSimpleGame from objc to c++, using cocos2d-x engine, then run it on win32/iphone/android/wophone multi-platforms. The Co
阅读全文