论 C++ 语言在信息学竞赛中的应用
2004年1月
Abstract
程序设计语言是信息学竞赛的一个重要组成部分,任何算法只有通过程序设计语言实现之后才能真正解决问题。C++ 语言凭借其高度的灵活性和强大的功能在大学生竞赛中被非常广泛地使用,在中学生竞赛中的使用也越来越广泛。本文分为三章,由浅入深地介绍了 C++ 语言的基础知识、面向对象编程基础和常用标准库、标准模板库(STL)。希望本文能够对想在信息学竞赛中使用 C++ 语言的读者有所帮助。前言
信息学竞赛一般要求在一定的时间内,理解并分析题意,设计符合给定时间和空间复杂度要求的算法,并在计算机上使用一定的程序设计语言正确地实现算法。由于整个竞赛存在时间限制(特别是 ACM/ICPC 类竞赛,在解决问题数目相等的情况下以做题累计时间的多少来决定名次),因此所使用的程序设计语言能否正确、快速地实现算法对竞赛的成绩影响颇大。所以,编程复杂度越来越受到重视。编程复杂度在很大程度上与所选用的程序设计语言有关。一般信息学竞赛比较常用的程序设计语言有以下几种:BASIC、Pascal、C/C++、Java,它们的特点如表 0.1 所示。
BASIC | Pascal | C++ | Java | |
---|---|---|---|---|
学习难度 | 容易 | 一般 | 较难 | 较难 |
语言特点 | 简单 | 严谨 | 灵活 | 高度面向对象 |
程序运行速度 | 慢 | 较快 | 快 | 慢 |
库函数功能 | 弱 | 一般 | 很强 | 强 |
在目前的中学生信息学竞赛中,Pascal 语言使用较为广泛。但是 C++ 语言凭借其本身所具有的高度的灵活性,以及它所带的库的强大功能,被越来越多的选手所使用。本文就是在这样一个背景下撰写的。在本文中,Pascal 语言以 Free Pascal1 为准;而 C++ 语言则以标准的 ANSI/ISO C++2 为准。
另外,需要注意的一点是,本文并不是参考资料。因此,对于 C++ 语言,本文不可能介绍得面面俱到,十分详细。如果想更加深入的学习 C++ 语言,可以阅读有关资料。
原因有二:1、标准 Pascal 所提供的东西实在是太少了;2、Free Pascal 在目前竞赛中使用较为广泛。推荐编译器:Free Pascal 1.0.10 (http://www.freepascal.org)。↩︎
C++ 标准请参考《C++ 程序设计语言(特别版)》。推荐编译器:gcc 2.95.3 (http://www.gnu.org/software/gcc/gcc.html, http://www.delorie.com/djgpp)。↩︎