C/C++用匿名数据结构实现时间和空间名利双收
来源:互联网 发布:淘宝网广场舞裙子套装 编辑:程序博客网 时间:2024/04/30 19:56
C/C++用匿名数据结构实现时间和空间名利双收
分类: 计算机技术 Visual C++2013-07-25 09:38 272人阅读 评论(0) 收藏 举报
程序的时间和空间,往往是一对矛盾,比如计算CRC32的时候会用到余式表
- DWORD *crcTable; // DWORD[256];
余式表可以用某种规则计算生成,为缩短文章长度就不写出来了,总之要做一堆数据处理,消耗时间
有时候为了提升程序时间,我们直接在内存中声明一个计算好的余式表
- DWORD crcTable[256] = {0x00000000L, 0x77073096L, 0xee0e612cL, ...}
这就是所谓的牺牲空间来换取时间,比如你一秒钟要计算10000次之类的,当然聪明的程序员会使用某种机制来处理这种冲突
比如记录是否已经生成:
- inline int CreateTable(unsigned long dwPoly)
- {
- // ...
- return 1;
- }
- if(!bCreated)
- {
- bCreate = CreateTable(0x77073096L);
- // ...
- }
- // calc crc
然而,并不是所有的情况都那么好处理,而且更多的情况是很难这样处理,比如我们有一个结构,保存客户信息
- struct stClient{
- DWORD Id;
- LPSTR Name;
- FLOAT Cash;
- // 1000 members here ... Oh no!
- DWORD the1003stMember;
- };
因为录入的时候,各个数据是分散的,如果我们用一个函数来设置这个这个结构
- void SetClient(DWORD Id, LPSTR Name, FLOAT Cash, ...) // 1001 arguments .. Oh shit!!
- {
- // ...
- }
很明显,大家都不是这种人,1000多个参数开什么玩笑,那么就一个个设置吧
- void SetClientId(DWORD Id)
- {
- // ...
- }
- void SetClientXXX(DWORD xxx)
- {
- // ...
- }
- // 1002 functions ... Oh damn!!!
很明显,大家也不是这种人,1000多个函数,开什么国际玩笑,那么怎么办,有了,用了大比大,全好了
- void SetClients(DWORD memId, DWORD dwArg, LPSTR strArg, FLOAT fArg)
- {
- switch(memId){
- case 0:
- ID = dwArg;
- break;
- case 1:
- Name = strArg;
- break;
- //case xxx: 1001 cases ... Oh shit!!!!
- }
- }
可是存在一个问题,虽然录入程序只需处理一个函数(接口),但是case太多,时间和空间的消耗都很大,难道我们就这样任命了吗?
当年我决定用C/C++的原因之一是因为她的灵活性,可以做正妻,也可以做小妾,还可以做情人...
没必要为了家庭娶个正妻,为了忍受正妻,取个小妾,为了制约小妾,养个情人,所以..
- typedef class CObj{ // class struct union bingo!
- public:
- DWORD Flags;
- union{
- DWORD dw[1000];
- struct{
- DWORD ID;
- FLOAT POINT;
- // any members ... yeah!
- }; // no struct fucking name
- }; // no union fucking name
- CObj();
- ~CObj();
- } OBJ;
- CObj::CObj()
- {
- memset(this->dw, 0, sizeof(DWORD) * 1000);
- }
直接使用这些匿名结构的成员,当然了,不要重复,正妻就用正妻的名字,要叫夫人,情人就要换个名字,虽然是同一个人
- OBJ *o = new CObj;
- o->dw[0] = 1;
- o->POINT = 100.f;
- printf("p-> %d, %d, %d.\n", o->ID, o->dw[1], o->dw[2]);
输出:
- p-> 1, 1120403456, -842150451.
妙啊!妙啊!这是有屎以来最妙的数据结构了,让我大吃一斤啊!
当然了,我不是教大家取小妾,养情人,而是另外的,你懂的.现在正妻不会和小妾争风吃醋,也不会和情人砍起来,时间和空间名利双收啊,
皇上,您还记得西湖河畔的夏雨荷吗?
0 0
- C/C++用匿名数据结构实现时间和空间名利双收
- C/C++用匿名数据结构实现时间和空间名利双收
- C++/c static和匿名命名空间 总结
- C++/c static和匿名命名空间 总结
- C++/c static和匿名命名空间 总结
- 【c/c++】算法的时间复杂度和空间复杂度
- 【C/C++】空间复杂度和时间复杂度的计算
- [C++]时间复杂度&空间复杂度
- 【c++】关于时间复杂度和空间复杂度的相关问题
- 排序算法的C语言实现以及各个算法的时间复杂度和空间复杂度分析(冒泡排序)
- 数据结构---栈链表c实现
- 数据结构---单链表c实现
- 数据结构(C语言实现)
- C数据结构实现队列
- 数据结构C语言实现
- 数据结构--单链表C实现
- 数据结构(C语言实现)
- 时间复杂度和空间复杂度[数据结构]
- 解决新建Support7Demos的sample时出现编译错误和运行报错出现的问题
- Bone Collector
- hdu 2955 Robberies
- 从 Racket 入门函数式编程
- ACM比赛经验
- C/C++用匿名数据结构实现时间和空间名利双收
- MongoDB Doc
- POJ 2411 Mondriaan's Dream(状压DP)
- VS2010编译fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 嵌入清单
- MAC - 命令行中用sublime打开指定文件
- git 学习总结 - 基于实际项目的经验
- java中的反射
- Activity生命周期方法的调用顺序工程与测试日志
- 输入一行字符串,找出其中出现的相同且长度最长的字符串,输出他及其首字符串位置