月无踪
月无踪
人生就如心电图,一帆风顺说明你挂了。
关注数: 45
粉丝数: 207
发帖数: 8,876
关注贴吧数: 34
求教,怎么通过输入构造带有指向父结点指针二叉树
[Windows API]消息循环 PostMessage是将消息放入到窗体的消息队列中,窗体过程需要等待一段时间,以便从队列中取出了消息之后,才处理消息 SendMessage不将消息放入消息队列,而只是把直接让窗体过程处理这个消息,所以消息一般能立刻响应。 TranslateMessage函数是将消息转化成某一个,或更多的消息,比如,当消息循环接收一个WM_KEYDOWN消息时,如果用户按下了字母键,那么TranslateMessage会产生一个WM_CHAR消息,让它跟在WM_KEYDOWN之后放入到消息队列中。 DispatchMessage函数用意是将消息交给操作系统来处理,之后操作系统会根据情况来调用窗体过程来处理消息。 Window窗体中的消息驱动实际上不是一种异步模式,而是同步模式,也就是说只有当DispatchMessage分发的消息被窗体过程处理了之后,才会回到消息循环中的GetMessage函数。
消息循环 TranslateMessage(&meg); 的作用具体是什么,我知道是执行某些消息的翻译并将翻译后的消息放入消息队列。 实际上是不是改变msg的结构了?如果是这样,DispatchMessage(&msg)传给窗口过程的消息不就是翻译后的消息了吗?
[Windows API]数据类型宏定义
想买个1T的移动硬盘,有人推荐下么
想买个1T的移动硬盘,有人推荐下么
网速有比我慢的吗?我刚看到秘鲁进球了
西瓜真心好使啊
秘鲁进球了
段暄甚至有点绝望了,“要不以后就别转播,要不就别踢了 当中国的球迷真累,中国的球迷能得到的幸福感太少了,但是足球真是一个奇妙的运动,希望这辈子我能看到国足起码进个世界杯决赛圈(当然不包括自己举办)
上午因为看球被老师骂了 我坐在第三排,开电脑看球,80多分钟被老师发现了,说我是坏学生
[C++]容器适配器 默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。queue要求其关联的基础容器必须提供push_front运算。因此也可以为list. 当不显示指定关联的基础容器时只能使用默认类型。否则,需显示指明: stack<string,vector<string> >str_stk2(svec);可以覆盖默认类型
[汇编] debug中的数默认为十六进制
尼玛天足真他么感人
[C++]调试函数 可使用NDEBUG预处理变量实现有条件的调试代码, int main() { #ifndef NDEBUG cerr<<"starting main"<<endl; #endif // 可以在main.c的开头提供#define NDEBUG预处理命令
[C++]怎么给偏特化后的类模板起别名 template <typename T, typename P> struct S {}; template <typename T> using S2 = S<T, int>;
[WINDOWS API]windows核心编程,字符和字符串的使用 typedef unsigned short wchar_t; //wchar_t定义为无符号短整型;
[Windows API]Destroywindow(hwnd)的问题 为啥窗口销毁后,窗口句柄还能使用?还有DestroyWindow产生的WM_DESTROY消息经过消息队列吗?是不是消息处理函数中调用函数产生的消息都要经过消息队列重新走一遍?
[Windows API]函数调用约定 1.4.1 __cdecl、_cdecl、cdecl关键字 这是在C++ Builder中特有的关键字,__cdecl、_cdecl、cdecl可以用来修饰变量或者函数,其含义是指定的变量或者函数使用C语言的调用规则和命名规则。在C++ Builder中C调用规则是缺省的设置,可以通过Project的Option菜单在Advanced Compiler标签中来改变缺省设置。 对于C命名规则的变量或函数,具有大小些敏感、编译后变量名称前下划线前导符,这与Pascal语言是不一样的。对于函数,C调用规则要求使用堆栈传递参数,参数传递的顺序为自右向左依次压入堆栈,由调用者自行清除堆栈,C调用规则允许向函数传递不定参数,但这种调用方式系统需要更多的开销来完成参数的匹配,除非特殊用途一般尽量不要使用,这种调用方式最典型的例子是控制台程序中的main函数,程序运行时可以不带参数,也可以带多个参数。 在一个独立的程序中,采用那种调用规则或者命名规则影响并不十分大,但是在多种语言混合编程,或者编写带有数据输出或函数输出的可执行模块(可执行文件和动态链接库)时,命名规则和调用规则显得尤为重要,使用不当则可能导致程序无法正常运行,甚至使系统崩溃。 __cdecl、_cdecl、cdecl的使用语法如下: cdecl <data/function definition> ; _cdecl <data/function definition> ; __cdecl <data/function definition> ; 例如: int cdecl I; //编译后标识符为“_I” void __cdecl Fun(); //编译后函数名为“_Fun” 1.4.2 __fastcall、_fastcall关键字 __fastcall和_fastcall也是C++ Builder中特有的关键字,只能用于修饰函数,其作用是指定函数使用“寄存器”调用规则,使用语法如下: return-type _fastcall function-name(parm-list) return-type __fastcall function-name(parm-list) 例如: void __fastcall GetName(int Index); 使用“寄存器”调用规则的函数,其参数传递顺序为自左向右依次传递,并且将前三个参数尽可能的使用EAX、EBX、ECX这三个寄存器传递,对于前三个参数中浮点类型、结构类型等超过四个字节的变量,和第四个及以后的参数则采用堆栈来传递,因此采用“寄存器”调用规则的函数只能传递固定数量的参数。 在C++ Builder中,所有属于VCL的成员函数,必须是__fastcall类型,编译器将“寄存器”调用规则和C调用规则、Pascal调用规则以及Win32的标准等其它调用规则是同等对待的,因此__fastcall关键字不能和__cdecl、__pascal、__stdcall等关键字联合使用,也不能和__export关键字同时使用(实际上使用__fastcall规则的函数是允许输出的,只是这种调用规则编写的dll或可执行模块只能被C++ Builder或者Delphi开发的程序载入并调用输出的函数)。 被指定为“寄存器”调用的函数会在编译时被冠以前导符@,这将使得C及C++的函数命名过于混乱,但是这种调用规则有很高的执行效率,因此在C++ Builder中几乎所有VCL的成员函数都使用这种调用规则。 但是__fastcall和_fastcall是C++ Builder之前的C++编译器所没有的调用规则,为了保证兼容性,可以使程序连接以前版本的编译器生成的库文件,C++ Builder提供了-VC命令行选项,缺省状态下,该选项是关闭的,当需要时,可以通过命令行编译并选择-VC选项。 1.4.3 __msfastcall、__msreturn关键字 __msfastcall和__msreturn也是C++ Builder中特有的关键字,使用这两个关键字可以为程序提供和Microsoft兼容的“寄存器调用”规则以及和Microsoft兼容的函数返回的规则。 被__msfastcall修饰的函数,其参数传递顺序为前两个参数如果长度小于4字节,则分别使用ECX和EDX寄存器传递,其余的参数和前两个不能使用寄存器传递的参数则按照从右向左的顺序通过堆栈来传递,堆栈由被调用函数负责清除。
Destroywindow(hwnd)的问题 为啥窗口销毁后,窗口句柄还能使用?
我来挑拨,大家认为西瓜+天使和梅西谁对阿根廷作用更大 也就是皇马还是巴萨谁对阿根廷国家队作用更大
我说12年之前可以说梅西全方位领先C罗 但是从上个赛季到这个赛季,梅吹就别那么多优越感了。
[Windows API]MSDN out表示,直接传进来一个MSG变量的地址就行,不需要初始化MSG
你们看算法导论,课后习题都做吗? ,以前学的线性代数和概率论好多都忘了
尽管我不满20岁,但是吧里球龄比我长的真没有多少 目测不超过15个
求个VS2012的下载地址 我是伸手党
[C++]C++数组元素为什么不可以是引用 命题:C++数组元素可以是引用 前提:引用只是别名, 引用和被引用变量是同一个实体, 它们具有相同的地址(所有C++的同志都认同的, 呵呵) 设定: int i; .... int j; ... int l; ... int m; ... int k; ... int & arr[] = {i, j, k, l, m}; 论证: 根据前提以及命题描述的, arr[0],arr[1],arr[2],arr[3],arr[4]实际上就是i、j、k、l、m五个变量本身, 然, 根据数组的定义, 数组成员的地址应该是连续的, 而实际上i、j、k、l、m的地址会是连续的吗? 不可能, 尤其是new出来的int, 这说明编译器根本无法实现这个命题 结论: 伪命题 转自CSDN
[算法]如何判断一个数是否是4的整数次幂 1, 若一个数为2的n次方,则二进制可表示为1后有n个零.(证明略) 2, 如果一个数(设之为x)乘以(2的n次方), 则二进制可表示为x后加n个零.(证明略) 以上两个应该是程序员必知了. 我们再看4的n次方的构成: 4^n= (2*2)^n = (2^n) * (2^n) 设x=2^n 则上式= x * (2^n) 因为x为2的n次方,所以二进制度可表示为1后有n个零 所以x * (2^n) 二进制可表示为x后加n个零 所以x * (2^n) 二进制可表示为1后有2n个零 其中n∈自然数 于是, 问题最终可归结为数1后有几个零的问题,如果是偶自然数,则为4的n次方
C语言头文件,C++头文件 C、传统 C++ #include <assert.h> #include <ctype.h> #include <errno.h> #include <float.h> #include <fstream.h> #include <iomanip.h> #include <iostream.h> #include <limits.h> #include <locale.h> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strstrea.h> #include <time.h> #include <wchar.h> #include <wctype.h>
高级语言为什么不直接编译成机器码,而编译成汇编代码 1.一般的编译器,是先将高级语言转换成汇编语言(中间代码),然后在汇编的基础上优化生成OBJ目标代码,最后Link成可执行文件。 2.Que:高级语言为什么不直接编译成机器码,而编译成汇编代码? ACK:1)其中有一个好处是方便优化,因为,编译器也是工具,也是机器,毕竟是机器生成的程序,不可以非常 完美的,而汇编是机器指令的助记符,一个汇编指令就对应一条机器指令(特殊指令除外)调试起来肯定会比 机器指令方便的方便,这样优化起来也方便。 2)高级语言只需要编译成汇编代码就可以了,汇编代码到机器码的转换是由硬件实现即可,有必要用软件实 现这样分层可以有效地减弱编译器编写的复杂性,提高了效率.就像网络通讯的实现需要分成很多层一样,主要 目的就是为了从人脑可分析的粒度来减弱复杂性. 3)如果把高级语言的源代码直接编译成机器码的话,那要做高级语言到机器码之间的映射,如果这样做的 话,每个写编译器的都必须熟练机器码。这个不是在做重复劳动么。
C++11成员访问
函数的数组形参 当调用包含数组形参的函数时,其实是将数组名转换为指针,因此void print(int* a); void print(int a[]);或者void print(int a[10]);效果都一样,其实都等价于void print(int *)主要是指针指向的数据类型。 当形参为数组的引用时,数组大小就必须制定了,而且调用时数组大小必须符合。如 void print(int (&a)[10]); 当实参为多维数组时,编译器忽略一维长度,所以最好这样定义: void print(int(*a)[10]);或者void print(int a[][10]);
算法导论:用合并排序算法解决逆序数问题 网址:blog csdn net/christophe2008/article/details/5949866
逆序对问题 设A[1..n]是一个包含n个不同数的数组。如果在i<j的情况下,有A[i]>A[j],则(i,j)就称为A中的一个逆序对。比如数组<2,3,8,6,1>有5个逆序对<2,1>,<3,1>,<8,1>,<6,1>,<8,6>。给出一个算法,它能用O(nlogn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目。方法是修改合并排序算法解决这个问题,算法的时间复杂度是O(nlogn)。(《算法导论》(第二版)P24,思考题2-4:逆序对)
全局变量 在实习面试里, 一道题我用栈模拟递归,那次我用了全局的栈, 当时面试官就问我,全局变量有什么危害... 我说到, 全局变量容易存在命名冲突, 暴露接口...他问还有么.. 但是我真心没想出还有什么危害... 直到...当我知道了还有线程安全这个东西...
[effective C++]必须返回对象时,别妄想返回其reference const Rational operator*(const Rational& lhs,const Rational& rhs); 若是引用,stack或者heap对象,都不行。倘若是static 对象,即 { static Rational result; result=...; return result; } 如果是这种情况下返回引用,if((a*b)==(c*d))将会恒为真,如果来个static array,如果n太小,可能会耗尽存储空间,如果n太大,会因此降低程序效率,因为array内的每一个对象都会在第一次调用时构造完成。那么将消耗n个构造和析构函数。最后,在对象之间搬移数值的最直接方法是通过赋值操作,但赋值的成本。。。 因此,必须返回新对象的函数就应该返回对象而不是引用
准备开始看《算法导论》了 乃们有啥建议否,洗耳恭听啊
11111111111111111111111
[effective C++]几乎 pass-by-const reference总是比pass-by-v… alue好 许多STL容器-内含的东西只比一个指针多一些,但复制这种对象却需承担复制那些指针所指的每一样东西。而且一个小type将来可能变大。 一般而言,pass-by-value并不昂贵的唯一对象就是内置类型和STL的迭代器和函数对象
[effective C++]让接口容易被正确使用,不易被误用 如 class Date{ public: Date(int month,int day,int year); }; 解决办法是 struct Day{ explicit Day(int d):val(d){} int val; }; //其它类似,定义Date必须 Date d(Month(3),Day(30),Year(1995));
看比赛不关注裁判名字的球迷都是伪球迷
[effective C++]以独立语句将newd对象置入智能指针 processWidgt(std::tr1::shared_ptr<Widgt>(new Widget),priority()); 如果编译器选择1.执行 new Widget 2.调用priority 3.调用tr1::shared_ptr构造函数 如果对priority调用异常,则可能发生资源泄露。 为了避免这种问题: std::tr1::shared_ptr<Widgt>pw(new Widget); processWidget(pw,priority());
[effective C++]在资源管理类中提供对原始资源的访问 APIs往往要求访问原始资源,所以每个RAII class应该提供一个取得其所管理之资源的方法。定义get函数或者隐式转换函数都可以
[effective C++]在operator=中处理“自我赋值” 传统做法: Widget& Widget::operator=(const Widget& rhs) { if(this==&rhs) return *this; delete pb; pb=new Bitmap(*rhs.pb); return *this; }//不保证异常安全,当new表达式失败,pb指向一块被删除的bitmap 让其具备异常安全性往往自动获得自我赋值安全的回报。最主要的是在赋值之前别删除pb: Widget& Widget::operator=(const Widget& rhs) { Bitmap* porig=pb; pb=new Bitmap(*rhs.pb); delete porig; return *this; }
[effective C++]绝不在构造和析构过程中调用virtual函数 在base class构造期间,virtual函数不是virtual函数。 正是因为“那些成员变量处于未定义状态”,所以“在base class构造和析构期间调用的virual函数不可下降至derived classes”. 解决办法: 令derived classes将必要的构造信息想上传递至base class构造函数
[effective C++]别让异常逃离析构函数 一个较佳的策略是重新设计接口,使用户有机会对可能出现的问题作出反应。
[effective C++]virtual析构函数 当class不企图被当做base class,令其析构函数为virtual是个坏主意: 每一个带有virtual函数的class都有一个相应的vtbl(virtual table pointer).会无故增加对象的体积。 必须为pure virtual析构函数提供一份定义。派生类析构函数会调用基类的析构函数
[effective C++]构造/析构/赋值运算 copy assignment操作符,其行为基本上与copy构造函数如出一辙,但一般而言只有当生出的代码合法且有适当机会证明它有意义。万一两个条件有一个不符合,编译器会拒绝为class生出operator=. 当类含引用成员或者const成员时,若为前者,赋值之后引用引用的对象应该变化么?(C++不支持让reference改指向不同对象,逻辑上赋值就是改变引用,实际上若为引用=引用,改变的是引用引用的对象。),面对这个难题,编译器拒绝编译那一行赋值动作。还有一种情况,就是base class将assignment操作符声明为private,编译器将拒绝为其derived class生成一个copy操作符。编译器为derived class所生的赋值操作符想象中可以处理base class部分。
关于static对象 转自effective C++: A static object is one that exists from the time it's constructed until the end of the program. Stack and heap-based objects are thus excluded. Included are global objects, objects defined at namespace scope, objects declared static inside classes, objects declared static inside functions, and objects declared static at file scope. global对象和定义于namespace作用域内的对象(PS:这里指的未命名的命名空间?)是static对象??????不要加static说明就是static对象?
[effective C++]确定对象被初始化 通常如果使用C part of C++而且初始化可能招致运行期成本,那么就不保证发生初始化。一旦进入non-C parts of C++规则就有变化,如数组不初始化,而vector确有此保证
[effective C++]尽量使用const 两个成员函数如果只是常量性constness不同,可以被重载。如重载下标操作符 真是程序中const对象大多用于passed by pointer-to-const或passed by reference-to-const的传递结果。 如void print(const TextBlock& ctb) { std::cout << ctb[0]; }
[effective C++]#define与const 无法利用#define创建一个class专属常量,因为#define并不重视作用域,一旦宏被定义,它在其后的编译过程中有效(除非在某处#undef); static const int NumTurns=5;//in-class 初值设定只允许对整数常量进行
[effective C++]C++:语言联邦 迭代器和函数对象都是在指针之上塑造出来的,所以对STL的迭代器和函数对象而言,旧式的C pass-by-value守则再次适用。
More effective C++
哈哈哈哈哈,我发现她在哪个教室了 尼玛找的第一个教室就看到她了
事件驱动模拟 计算一天中客户在银行逗留的平均时间: 称客户到达银行和离开银行这两个时刻发生的时间为“事件”,则整个模拟程序将按事件发生的先后顺序进行处理,这样一种模拟程序称作事件驱动模拟。
头结点与头指针 头节点是为了操作的统一、方便而设立的,一般来说,头节点放在第一元素节点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等)。有头节点后,对在第一元素节点前插入节点和删除第一节点,其操作与对其他节点的操作统一了。而且无论链表是否为空,头指针均不为空。 首元节点是第一元素节点,它是头节点后边的第一个节点。
鉴于12级以上的人太水,以后别理他们,要他们自己玩泥巴去
罗吧签到人数日益减少啊
不内涵,我也算得上这个吧的元老了吧
首页
4
5
6
7
8
9
下一页