博文

C++ STL(2007-09-08 14:32:00)

摘要:/// 网络转载 STL算法学习,小结如下: 前提: 下载stl源码:  http://www.sgi.com/tech/stl/download.html
打开网页:     http://www.sgi.com/tech/stl/stl_index.html 一   函数对象: 因为很多的算法中多使用了函数对象
二元函数对象,V1和V2为输入,V3为结果 plus<T>:
  transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),plus<double>()); 其他的二元函数对象:minus,multiples,divieds,modulus. 二元断言函数对象,使用时需要bind2nd()或bind1st()来绑定比较对象。 less<T>:
  find_if(L.begin(), L.end(), bind2nd(less<int>(), 0)); 其他的二元断言函数:equal_to,notequal_to,greater,greater_equal,less_equal,logical_and,logical_or 二元逻辑函数 binary_negate:
const char* wptr = find_if(str, str + MAXLEN,
                           compose2(not2(logical_or<bool>()),
                     &n......

阅读全文(3122) | 评论:1

C++ String 类(2007-09-07 23:16:00)

摘要:///////////////////              该文系网上转载 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。
    好了,进入正题………
首先,为了在我们的程序中使用string类型,我们必须包含头文件 <string>。如下:
    #include <string> //注意这里不是string.h string.h是C字符串头文件

1.声明一个C++字符串
声明一个字符串变量很简单:
    string Str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:
a)    string s;  //生成一个空字符串s
b)    string s(str) //拷贝构造函数 生成str的复制品
c)    string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值
d)    string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值
e)    string s(cstr)......

阅读全文(2617) | 评论:1

编写易于理解的代码(2007-09-04 20:35:00)

摘要: 》》》》》》》转自: CSDN,  编程风格是值得一再强调的,因此特转载此篇文章。对于一名开发人员,时间是最宝贵的资源。本文所要介绍的这六种编写可维护代码的方法可以保证让您节省时间和少受挫折:在编写注释上多花一分钟,会让您少受一小时研读代码的痛苦折磨。 》》》》》》》一般衡量代码的顺序为: 正确性,可读性,可维护性,高效性,无论哪个领域正确性都是必不可少的,可能有的领域更强调高效性,可读是可维护的前提,可维护的代码,容易扩充,容易升级。这方面比较好的书是,《代码大全》。 我学习编写、改善和维护代码的过程是很艰苦的。在过去的 12 年里,我一直在编写计算机游戏并通过曾红极一时的共享软件技术进行网络销售,并以此为生。这就是说,我常常要从空白的屏幕开始从头编码,当代码达到数万行之后才能拿去销售。 这也就是说,如果我出了错,我必须要自己去解决问题。当我在凌晨三点还在竭力寻找 bug 的时候,看着这些不知所云的晦涩代码,我不禁自问:“我的天啊,这些垃圾代码究竟是哪个笨家伙写的啊?”,很不幸,问题的答案是 “我”。 在学习了良好、正规的编码技巧之后,我大受其益。本文就包括了其中的一些实践。具有丰富经验的资深程序员大都对这些内容烂熟于心。他们可以通过本文优美的散文式的介绍再重温一遍,并可回顾一下在采取清晰编码的理念之前,编码是多么地令人头痛。 但更多的人会如同我一样,是无意间跌跌绊绊地闯入编程领域的,而且没有人为其灌输这些编程技巧和理念。本文所要介绍的这些内容对很多人来说也许很基础,但对于其他人来说却是极为宝贵的资源,因为之前没有人告诉过他。所以,如果您不想走弯路,那么本文将非常适合您。 示例 为了便于解释,本文全篇都将使用一个示例太空游戏程序,称为 Kill Bad Aliens。在这个游戏中,您将通过键盘来控制一个宇宙飞船,它可以在屏幕底端水平向前或向后移动,还可以向上发射子弹。
图 1. 我们的假想游戏

游戏发生在称为 Wave 的各个时间段。在每个 wave,外星人都会一个接一个地出现在屏幕顶端。它们到处飞,还会投掷炸弹。外星人将按固定时间间隔出现。在杀死一定数量的外星人之后,一个 Wave 就告结束。 杀死一个外星人会给您加分。当结束一个 wave 时,根据您完成游戏所需时间的长短还会有额外的分数奖励。 ......

阅读全文(2291) | 评论:0

继承问题(论坛)(2007-04-30 22:23:00)

摘要:论坛上网友题的问题: // 原帖如下 地址:http://www.programfan.com/club/showbbs.asp?id=229171
class MyError
{
private:
    const char* const m_msg;
public:
    MyError(const char* const msg)
        : m_msg(msg)
    {
    }

    virtual void Report(void) const
    {
        cout << m_msg << endl;
    }
};

class MySubError : public MyError
{
public:
    MySubError(const char* const msg)
        : MyError(msg)
    {
    }

    void Report(void) const
&nbs......

阅读全文(2730) | 评论:0

关于C的反面文章(2007-04-30 12:30:00)

摘要:现在,有很多C/C 程序员总是自命不凡,看不起其他开发人员。其实,或许别人更看不起他呢!   学生时代,我也曾醉心于C/C ,但时至今日,始终无法写出无懈可击的C 代码,所以我始终认为我不会C/C 。这些年,我一直在寻找编写C 代码的最佳模式。但是,老实说,我还没有见到过哪个称得上高手的C 程序员,也没有见到过写得Very good的C/C 代码。C/C 代码总是丑陋不堪,BUG丛生!   我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&R和Steele的书。我太了解C语言了,但是,我讨厌他。十分讨厌!   当我读到一篇博客,题目是“为什么每个程序员都应该学习C语言?”时,我真是鸡皮疙瘩满地。如果你真的是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。   1、内存分配   仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存,在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。   2、多线程   我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每......

阅读全文(2491) | 评论:0

程序员可以来看看(2007-04-29 13:06:00)

摘要:(下面这些文字不是我的原创,是我偶尔在网上发现的,我真的很幸运能看到这些,这篇文章也随着下面的文字而结束,我真心的希望您能从这篇文章中得到启发,这篇文章欢迎大家随意转载,您可以不写作者是谁,但是请您写上www.vcroad.net原创,谢谢您的支持)

作者:金蝶中间件公司CTO袁红岗

不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。

  1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。

  2. 丰富的想象力。不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。另外,多看科幻电影也是一个很好的途径。

  3. 最简单的是最好的。这也许是所有科学都遵循的一条准则,如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。

  4. 不钻牛角尖。当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,而且是那种极暴力的打斗类游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。

  5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中......

阅读全文(1910) | 评论:0

C++标准阅读笔记(2007-04-27 22:13:00)

摘要:// 以下是个人阅读C++标准时记录的一些容易被忽略的语法
// 希望对你有所帮助。
1,换页符 '\f' 如何换页 :
2,在常量后面加上 L或者U表示长整形或者无符号整形,在 int long长度不同时很有必要
   但是加上可以提高程序的可移植性 long a = 23L;
3,浮点型可以处理三百多位的运算
4,不但变量有内存地址,函数同样也有,这里不了解
5,C ++可以这样输出字符串 :cout<<"skdfjsdf\n"
      "ksdfjlksdfjsdfs\n"
      "ksdfjssssssssdfsdfsdfjsdlfs\n";
6,常量类型的变量不能作为左值
7,移位运算,变量本身不变如 int i = 2; j = i<<2; i 没变 9,a = a + 1 与 a += 1 区别,前者对 a 计算两次而后者只计算一次
10,cout<<endl; 与 cout<<'\n';的区别是前者在输出换行符后更新输出流而后者只输出个换行符
    当然这个区别不是在所有的编译器中都有体现
11,在C++中 main() 默认返回整形值,默认有两个参数
12,我晕 main()函数在VC++6.0中允许递归调用
13,可变函数参数: void test(int,...);
17,良好的程序设计风格,每个函数完成一个特定的功能
18,无名形参 void test(int i,int); // 调用时必须给出无名形参所在值 test(2,4);
19,C++支持默认参数
20,内联函数,C++标准没有明确说明必须在调用之前声明内联函数,使用内联函数有两种情况
    取带宏或者把一个大函数分成多个内联函数,这样可以改进程序的可读性
21,之所以函数可以递归是因为,每当函数被调用时都会把参数和他的局部数据对象拷贝到一块
    专有的内存区......

阅读全文(5398) | 评论:5

C++初学者代码(2007-04-27 12:59:00)

摘要:// 以下是自己当初学 C++ 时的代码,有点象草稿纸,希望对初学者有所帮助:
// 所有函数均在VC下编译运行: // 1,特殊函数的调用顺序问题
#include <iostream>
using namespace std; void test();
class mycls{
public:
 mycls(){
  cout<<"construct mycls"<<endl;
 }
 ~mycls(){
  cout<<"destroy mycls"<<endl;
 }
}; class myexp{
public:
 myexp(){
  cout<<"construct myexp"<<endl;
 }
 ~myexp(){
  cout<<"destroy myexp"<<endl;
 }
 myexp(myexp& t){
  cout<<"copy construct myexp"<<endl;
 }
 /*  注释掉拷贝构造函数结果是:
  construct mycls
  in try
  in fun test()
  construct myexp
  destroy myexp
  destroy mycls
  in catch
  destroy myexp
  Press any key to continue . . .
  不注释掉结果是:
  ......

阅读全文(6987) | 评论:0

PSP程序段前缀(转)(2007-04-23 12:44:00)

摘要:程序段前缀PSP格式: 偏移 字节数 说 明 0000 02  中断20H 0002 02  以节计算的内存大小(利用这个可看出是否感染引导型病毒) 0004 01  保留 0005 05  至DOS的长调用 000A 02  INT 22H 入口 IP 000C 02  INT 22H 入口 CS 000E 02  INT 23H 入口 IP 0010 02  INT 23H 入口 CS 0012 02  INT 24H 入口 IP 0014 02  INT 24H 入口 CS 0016 02  父进程的PSP段值(可测知是否被跟踪) 0018 14  存放20个SOFT号 002C 02  环境块段地址(从中可获知执行的程序名) 002E 04  存放用户栈地址指针 0032 1E  保留 0050 03  DOS调用 ( INT 21H / RETF ) 0053 02  保留 0055 07  扩展的FCB头 005C 10  格式化的FCB1 006C 10  格式化的FCB2 007C 04  保留 0080 80  命令行参数长度(不包含总为最后的0D)及参数
 也是程序运行期间缺省的DTA 一个操作示例: D:\Masm615>dir jch           ;显示计算阶乘的程序

  Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory of D:\Masm615

JCH  &......

阅读全文(5675) | 评论:3

C语言变成了鸡肋,痛苦(2007-03-30 07:56:00)

摘要:从C向C++转变         学了一两年的C了,现在要学C++,因为不可否认的C++(JAVA)面向对象是当前主流当然这或许是自己一厢情愿吧,听说现在嵌入式的C开发也很热门 。写过很多的C程序几万行的代码应该有了,对C自认为还是比较熟悉,这些熟悉却成了我食之无喂,弃之不舍的鸡肋,哎,真是苦脑。C++虽然是C的加强,但是他们根本不是一码事,我不是指那些语法而是指编程思想。人的一生有很多的选择,我现在走在了C和C++的分叉口,徘徊不定,人总是要做出选择的,尽管某些选择太过残忍 !最后我决定还是选C++,原因有很多,我读过几本C++方面的书,感觉C++是一门不错的语言;还有C太复杂了不说别的我就说软考里的那道程序题,C的我看了一两个小时,去年那道好象是关于B树的吧,自己对B树不熟悉,翻书看了以后也还是不太明白,而关于C++的那些填代码的题却非常简单竟然在一节课里近两年的题都做完了而且成功率很高。当然这不能说明什么,C++也不是想象中的那么容易。我最后想说的就是,门门通不如一门精,不要说你精通这个精通那个,除非是求职时面对那些无知的招聘人员。精通一门,其它的能说个熟悉就够了 !搞软件英语是很重要的,数据结构和算法任何时候学都不是错。 帖几个招聘信息: B) 软件开发工程师-C/C++
大学本科以上学历,计算机专业,2年以上软件产品开发经验
精通C/C++ 编程
精通UNIX或WINDOWS平台编程
熟悉INFORMIX或DB2或ORACLE或SYBASE数据库
精通Socket网络通讯编程

职务技能:
具有良好的沟通能力和团队合作精神
具备市场意识、质量意识
有创新精神、乐于学习
头脑反应敏捷、乐于思考 // 一大堆的精通???沟通能力和团队精神倒说的不错,高手尤其要注意。 本科或本科以上学历,电子、计算机、控制或相关专业,软件基础扎实,头脑灵活,熟练掌握多种嵌入式CPU的软件编程,熟练应用C语言,对ARM或其它32位嵌入式处理器有一定了解,3年以上相关产品的软件设计和开发经验,有linux下编程实践或FPGA编程实践的优先。

// 这个招牌广告还不错,开发经验 3 年,晕 ......

阅读全文(2938) | 评论:1