
标準函式
标準函式,是具有常用功能的函式。在程式设计中,常将一些常用的功能模组编写成的函式放在函式馆中供公共选用,一般称为标準函式。程式是由若干个程式模组组成的,高级语言中有子程式这个概念,子程式的功能由函式来实现的。C++标準函式馆为C++程式设计师们提供了一个可扩展的基础性框架。我们从中可以获得极大的便利,同时也可以通过继承现有类,自己编制符合接口规範的容器、算法、叠代子等方式对之进行扩展。
基本介绍
- 中文名:标準函式
- 外文名:Standard function
- 基础性框架:C++标準函式馆
- 分类:函式
- 实质:具有常用功能的函式
- 研究领域:程式设计
C标準函式馆
基本保持了与原有C语言程式库的良好兼容,儘管有些微变化。在C++标準库中存在两套C的函式馆,一套是带有.h扩展名的(比如<stdio.h>),而另一套则没有(比如<cstdio>)。实际上它们没有太大的不同。
分类
语言支持
属于language support部分,包含了一些标準类型的定义以及其他特性的定义,这些内容,被用于标準库的其他地方或是具体的应用程式中。
诊断
属于diagnostics部分,提供了用于程式诊断和报错的功能,包含了异常处理(exception handling),断言(assertions),错误代码(error number codes)三种方式。
通用工具
属于general utilities部分,这部分内容为C++标準库的其他部分提供支持,当然你也可以在自己的程式中调用相应功能。比如:动态记忆体管理工具,日期/时间处理工具。记住,这里的内容也已经被泛化了(即採用了模板机制)。
字元串
属于string部分,用来代表和处理文本。它提供了足够丰富的功能。事实上,文本是一个string对象,它可以被看作是一个字元序列,字元类型可能是char,或者wchar_t等等。string可以被转换成char*类型,这样便可以和以前所写的C/C++代码和平共处了。因为那时候除了char*,没有别的。
国际化
属于internationalization部分,作为OOP特性之一的封装机制在这里扮演着消除文化和地域差异的角色,採用locale和facet可以为程式提供众多国际化支持,包括对各种字元集的支持,日期和时间的表示,数值和货币的处理等等。毕竟,在中国和在美国,人们表示日期的习惯是不同的。
容器
属于containers部分,STL的一个重要组成部分,涵盖了许多数据结构,比如前面曾经提到的鍊表,还有:vector(类似于大小可动态增加的数组)、queue(伫列)、stack(堆叠)……。string也可以看作是一个容器,适用于容器的方法同样也适用于string。现在你可以轻鬆的完成数据结构课程的家庭作业了。
算法
属于algorithms部分,STL的一个重要组成部分,包含了大约70个通用算法,用于操控各种容器,同时也可以操控内建数组。比如:find用于在容器中查找等于某个特定值的元素,for_each用于将某个函式套用到容器中的各个元素上,sort用于对容器中的元素排序。所有这些操作都是在保证执行效率的前提下进行的,所以,如果在你使用了这些算法之后程式变得效率底下,首先一定不要怀疑这些算法本身,仔细检查一下程式的其他地方。
叠代器
属于iterators部分,STL的一个重要组成部分,如果没有叠代器的撮合,容器和算法便无法结合的如此完美。事实上,每个容器都有自己的叠代器,只有容器自己才知道如何访问自己的元素。它有点像指针,算法通过叠代器来定位和操控容器中的元素。
数值
属于numerics部分,包含了一些数学运算功能,提供了複数运算的支持。
输入输出
属于input/output部分,就是经过模板化了的原有标準库中的iostream部分,它提供了对C++程式输入输出的基本支持。在功能上保持了与原有iostream的兼容,并且增加了异常处理的机制,并支持国际化internationalization。
总体上,在C++标準函式馆中,STL主要包含了容器、算法、叠代器。string也可以算做是STL的一部分。
这里总结了标準输入输出函式的申明和用法:
档案操作标準I/O库函式:fopen、fread、fwrite、fclose、fflush、fseek、fgetc、getc、getchar、fputc、putc、putchar、fgets、gets、printf、fprintf、sprintf、scanf、fscanf、sscanf、fgetops、fsetops、ftell、rewind、freopen、setvbuf、remove、fileno、fdopen
目录操作标準I/O库函式:opendir、readdir、telldir、seekdir、closedir