随笔分类 -  【c/c++】

摘要:思考是由wchar_t引发的,干嘛要用wchar_t?我用char[]可以顺利的输出汉字啊!char是一个字节,wchar_t是2个字节或者4个字节的。1.unicode字符集一开始概念很混乱,发了几个帖子,和别人讨论了几天,自己理顺了下概念。我简单用我的话概括一下:unicode字符集,什么是字符集,字符集就是一个映射表计算机通过它找到对应的字符;unicode的把全球所有文字都做了映射。utf-8、utf-16、utf-32都是编码方式,各自实现各自的方便。utf-8来说利于传输因为它是变长的,有一个字节的(ascii在utf-8中都只占一个字节并且是一致的),俩的,三个的。有一个传输出错 阅读全文
posted @ 2012-07-27 23:06 wen_dao_ 阅读(7401) 评论(1) 推荐(1) 编辑
摘要:*****************************char *p[4],为指针数组char (*p)[4],为数组指针**********************************************************关于观察者模式和manager很类似。do not call me, i will call you.*****************************class ObserverInterface {public: bool is_changed_; ObserverInterface(bool is_changed):is_changed_(i 阅读全文
posted @ 2012-03-20 10:42 wen_dao_ 阅读(279) 评论(0) 推荐(0) 编辑
摘要:csdn上一道面试题:十进制整数,计算对应的二进制数包含多少个1,用位操作。*****************************int n = 95625; int m = 1; int num = 0; for (int i = 0;i < sizeof(int)*8;i++) { int temp = n & m; m = m << 1; if (temp != 0) { num++; } } cout << num << endl;*****************************让1不断移位去判断与其对应位置是否为1若是有 阅读全文
posted @ 2012-03-15 15:46 wen_dao_ 阅读(130) 评论(0) 推荐(0) 编辑
摘要:1、数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数*****************************int do_dup(int a[], int N) { int sum1 = 0; int sum2 = 0; for (int i = 0;i < N;i++) { sum1 += a[i]; sum2 += i; } cout << sum1 - sum2 << endl; return sum1 - sum2;}*****************************2、一语句实现 阅读全文
posted @ 2012-03-13 17:26 wen_dao_ 阅读(158) 评论(0) 推荐(0) 编辑
摘要:*****************************在有些编程语言中,函数是“第一级值”。在这些语言中,可以将函数作为函数参数传递,并把它们当作表达式的组件使用等。c++不属于这类语言,但这一点并不是显而易见的。因为对于c++程序而言,将函数作为参数传递,并把它们的地址存储在数据结构中是很常见的操作。例如,假设我们想对某个数组的所有元素都运用某个给定函数。如果这个函数有一个int参数,并且生成void类型,我们可以如下编写代码*****************************void apply(void f(int), int *p, int n) { for (int i = 阅读全文
posted @ 2012-03-12 19:19 wen_dao_ 阅读(248) 评论(0) 推荐(0) 编辑
摘要:*****************************不要过度修饰和过于求精而毁损完好的程序。它也许不完美,但不用担心:它不可能完美。*****************************对于正交设计,有一种简单的测试方法,一旦设计好组件,问问你自己:如果我显著地改变某个特定功能背后的需求,有多少模块会受影响?在正交系统中,答案应该是1个。让你的代码保持解耦 避免使用全局数据 避免编写相似的函数*****************************abstractions live longer than details*****************************so 阅读全文
posted @ 2012-02-27 15:55 wen_dao_ 阅读(338) 评论(0) 推荐(0) 编辑
摘要:使用指针访问数组元素c++语言中,指针和数组密切相关。*****************************int ia[] = {0,2,4,6,8};int *ip = ia;// ip points to ia[0]*****************************指针的算数操作与其使用下标操作,倒不如通过指针的算数操作来获取指定内容存储地址。指针的算数操作和迭代器的算术操作以相同的方式实现。使用指针的算数操作在指向数组某个元素的指针上加上或减去一个整数数值就可以计算出指向数组另一个元素的指针值:*****************************ip = ia;int 阅读全文
posted @ 2012-02-24 13:54 wen_dao_ 阅读(328) 评论(0) 推荐(0) 编辑
摘要:语法#和##字符#右边的宏参数转换为字符串*****************************#define str(a)#astr(1+1)==>"1+1"*****************************##*****************************#define name(a) \ void get##a(){}name(F);//在main中就可以调用getF();*****************************减少重复计算gcc的扩展 vs编译不通过*****************************#defin 阅读全文
posted @ 2012-02-23 13:33 wen_dao_ 阅读(562) 评论(0) 推荐(0) 编辑
摘要:如果必须分开定义指针和其所指向的对象,则将指针初始化为0.因为编译器可检测出0值的指针,程序可以判断该指针并未指向一个对象。c++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址c++保证:删除0值的指针是安全的。删除指针后,该指针变成悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不存在了。一旦删除了指针所指向的对象,立即将指针设置为0,这样就非常清除的表面指针不再指向任何对象。指向const对象的指针:cosnt double *cptr;const指针:int *const curErr = &errNumb;指向const对象的const指针 const 阅读全文
posted @ 2012-02-18 15:21 wen_dao_ 阅读(187) 评论(0) 推荐(0) 编辑
摘要:1 for(vector<Enemy*>::iterator it = enemy_vector_.begin();it != enemy_vector_.end();++it) {2 enemy_vector_.erase(it);3 //CCLog("%d num",enemy_vector_.size());4 it = enemy_vector_.begin();5 }vector进行erase后旧的容器会被重新整理成一个新的容器,it迭代器失效,变成一野指针。所以erase后,要赋给it一个新的迭代器。 回过头来看上面... 阅读全文
posted @ 2012-02-03 11:35 wen_dao_ 阅读(760) 评论(0) 推荐(0) 编辑
摘要:重新来来java native interface(jni)jni是java调用c++的一种接口,思维局限到单向的从java到c++,我错了!c++可以保持java的对象句柄(我感觉这里用句柄很合适),当然程序入口是开始的activity通过jni来找到c++调用,此时c++可以保存住java的句柄;如果此时程序一直在c++代码上执行,触发一个事件时,c++代码可通过保存的java句柄通过jni超找到java方法(机器内都是二进制而能不能互相认识就要知道函数真实的名字c++ 有Name Mangling,有想必java也有,而且c++不同编译器的Name Mangling方式也不一样)... 阅读全文
posted @ 2012-01-13 19:09 wen_dao_ 阅读(1009) 评论(0) 推荐(0) 编辑
摘要:写程序不再是写程序过程中唯一的一件事情,从整体出发构想一下大体结构;看了一点什么模式什么攻略,就生搬硬套,思维容易陷入一种定式,为什么不提醒下自己我可以换一种方式吗?简单最好;状态机,很多时候我们都会用到,可是当他赋予一种定义,一种规范,他变得很强大,很清晰;为什么我们用的时候没意识到他可以那样呢?学了太久的java在类和对象还有类库本身的容器上执着太久,可能是自己学习进入误区:往往会忽略分析,哪些数据应该是静态的(全局的),哪些应该是跟随对象而生而亡的;虽然写过一些博客,但是质量都很差,很多都是一边看书一边做的笔记;虽然很多笔记吧,我想起码比不写好,写后可以感受到自己的进步。我不是技术狂热者 阅读全文
posted @ 2012-01-06 10:59 wen_dao_ 阅读(174) 评论(0) 推荐(1) 编辑
摘要:所谓static对象,其寿命从被构造出来知道程序结束为止,因此stack和heap-based对象都被排除。这种对象包括global对象、定义于namespace作用域内的对象、在classes内、在函数内、以及在file作用域内被生命为static的对象。函数内的static对象称为local static对象,其他static对象称为non-local static 对象。程序结束时static对象会被自动销毁,也就是他们的析构函数会在main()结束时被自动调用。 所谓编译单元(translation unit)是指出单一目标文件的那些源码。基本上它是单一源码文件加上其所含入的头文... 阅读全文
posted @ 2011-12-30 15:56 wen_dao_ 阅读(888) 评论(0) 推荐(0) 编辑
摘要:默认情况下,局部变量的生命期局限于所在函数的每次执行期间。只有当定义它的函数被调用时才存在的对象成为自动对象。自动对象在每次调用函数时创建和撤销。 局部变量所对应的自动对象在函数控制经过变量定义语句时创建。如果在定义时提供了初始化式,那么每次创建对象时,对象都会被赋予指定的初值。对于为初始化的内置类型局部变量,其初值不确定。当函数调用结束时,自动对象就会撤销。 形参也是自动对象。形参所占用的存储空间在调用函数时创建,而在函数结束时撤销。 自动对象,包括形参,都在定义它们的块语句结束时撤销。形参在函数块中定义,因此当函数的执行结束时撤销。当函数结束时,会释放它的局部存储空间。在函数结束... 阅读全文
posted @ 2011-12-29 12:24 wen_dao_ 阅读(2470) 评论(0) 推荐(0) 编辑
摘要:依然没成功,看到别人很容易的就跑起来了,我这里,这不行那不行,就像我最近的状态一样(睡的也挺早,起的也挺晚,就是没精神); 重新做一下hello-jni屡屡思路,hello-jni成功跑起来,cocos2d-x helloworld继续不行,发给别人竟然可以运行…… mark2011121816:22没修改什么东西,竟然跑起来了! attention:(配置完环境后) 如果加载本来就有android的配置就不用管这个create-android-project.bat(这个就负责生成android目录结构)。 在android目录下找到build_native.sh修改(这个的作... 阅读全文
posted @ 2011-12-28 12:30 wen_dao_ 阅读(417) 评论(1) 推荐(0) 编辑
摘要:今天下午把cygwin安装上,尝试把hello-jni跑了起来;不过当把cocos2d-x中的helloworld放到模拟器上时总是跑不起来(黑屏等待),不知什么原因!write by fgd 阅读全文
posted @ 2011-12-27 17:55 wen_dao_ 阅读(217) 评论(1) 推荐(0) 编辑
摘要:原先,不是很理解ndk和jni,认为ndk封装了jni,也写过一个helloworld的jni例子,今天查了查: 1.jni是java原先提供的调用c++/c的一种机制 2.ndk是google对于android提供的一种调用c++/c的一种机制。 类似于java虚拟机和dalvik的关系;此java非彼java;这是目前心中jni和ndk的概念。 配置android环境中(sdk,ndk-win32下还要模拟linux环境),比较慢,待续 阅读全文
posted @ 2011-12-22 13:54 wen_dao_ 阅读(423) 评论(0) 推荐(0) 编辑
摘要:头文件用于声明而不是用于定义 当设计头文件时,记住定义和声明的区别很重要的。定义只可以出现一次,而声明则可以出现多次。下列语句是一些定义,所以不应该放在头文件里:1 extern int ival = 10; // initializer, so it's a definition2 double fica_rate; // no extern, so it's a definition 虽然ival声明为extern,但是它有初始化式,代表这条语句是一个定义。类似地,fica_rate的声明虽然没有初始化式,但也是一个定义,因为没有关键字extern。同一个程序中有两个以上文 阅读全文
posted @ 2011-12-20 10:44 wen_dao_ 阅读(788) 评论(0) 推荐(0) 编辑
摘要:默认地,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1。 枚举成员是常量 用来初始化枚举成员的值必须是一个常量表达式。(常量表达式是编译器在编译时就能计算出结果的整形表达式);整形字面值常量是常量表达式,正如一个通过常量表达式自我初始化const对象也是常量表达式一样。 枚举成员值可以是不唯一的。 不能改变枚举成员的值。枚举成员本身就是一个常量表达式,所以可用于需要常量表达式的任何地方。 每个enum都定义一种唯一的类型 和其他类型一样,可以定义和初始化Points类型的对象,也可以以不同的方式使用这些对象。枚举类型的对象初始化或赋值,只能通过其枚举成员或同一枚举... 阅读全文
posted @ 2011-12-19 09:59 wen_dao_ 阅读(815) 评论(0) 推荐(0) 编辑
摘要:今天看代码想到一个问题,引擎在什么时候通过什么方法调用的opengl画出的图形?于是就在cocos2d-x中找到了draw,之后又查了点资料。 Like in any game engine there are 2 different methods to draw and update things. Draw Each node has a draw method. This method is called every frme. The purpose of this method is to draw and only draw the node, nothing more... 阅读全文
posted @ 2011-12-16 18:11 wen_dao_ 阅读(3767) 评论(0) 推荐(0) 编辑