读书笔记-算法竞赛入门经典(第二版)-第五章 C++与STL入门之从C到C++

5.1 从C到C++

        5.1.1 C++版框架

  1.     C++能编译大多数C语言程序。虽然C语言中大多数头文件在C++中仍然可以使用,但推荐的方法是在C头文件之前加一个小写的c字母,然后去掉.h后缀。例如stdio.h->cstdio.h,string.h->cstring,math.h->cmath,ctype.h->cctype.

  2.     C++用输入输出流iostream来解决输入输出问题,避免了C中各种输入输出格式问题,但是最大的缺点是运行太慢。可以通过关闭和stdio的同步,即调用ios::sync_with_stdio(false)来加速。

  3.     C++通过使用命名空间的问题来缓解复杂程序的组织问题。最常见的是使用using namespace std。例如,有两个不同的人甲和乙写的同一个函数fun()要整合到一个工程中,可以使用std1:fun()和std2:fun()来避免冲突,这和Java中使用全限定名来避免冲突是类似的。

  4.     C++中声明数组大小时,推荐用const int maxn = 100;这种形式来替代#define maxn 100这种形式。

  5.     C++的数据类型和C语言很接近,最显著的区别是多了一个bool来表示布尔值,然后用true和false分别表示真和假。

       5.1.2 引用

            C++提供了引用,虽然在功能上比指针弱,但是减少了出错的可能性,提高了代码的可读性。C++中的引用就是变量的“别名”,它可以在一定程度上代替C中的指针,可以在函数内直接修改实参。

       5.1.3 字符串

            C++提供了一个新的string类型,用来替代C语言中字符数组。C++在string头文件里定义了string类型,直接支持流式读写。string有很多方便的函数和运算符,但速度有些慢。

       5.1.4 再谈结构体

            C++中不再需要用typedef的方式定义一个struct,而且在struct里除了可以用变量(称为成员变量)之外还可以有函数(称为成员函数)。注意在工程上和算法竞赛中使用struct和class的区别,算法竞赛中一般用struct。

       5.1.5 模板

            虽然模板在工程中的应用范围很广,而且功能十分强大,但在算法竞赛中用的比较少。

       5.1.6 番外篇 运算符重载

           1.定义:

           运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。运算符重载的实质就是函数的重载。

           2.格式:

           函数类型 operator 运算符名称(形参列表)

           {对运算符的重载处理}

           注意:operator是关键字,operator 运算符名称是函数名称。

           3.一般规则:

            运算符重载函数既可以作为类的成员函数,也可以是类的友元函数,还可以是既非成员函数又非友元函数的普通函数(这种情况极少)。

            一般而言,将单目运算符重载为成员函数,将双目运算符重载为友元函数。

           特例:

           对">>"和“<<”重载的函数形式如下:

          istream & operator >>(istream &, 自定义类 &);

          ostream & operator <<(ostream &,自定义类 &);

          只能将重载">>"和"<<”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数。

          原因:

          定义为成员函数第一个参数是隐含的this,而上面重载的函数中第一个参数是istream(ostream) &,不符合要求。

          哈哈,最后一个问题:为什么要使用函数重载呢?

          这样可以使得用户更为方便的使用,也方便程序员编写和调试。可以说是利己也利人。

     至此,算法竞赛中有关C++的部分就已经基本上总结完了。

     参考:C++面向对象程序设计,谭浩强

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值