文档名称
文档密级
1 C++ 标准库
C++ 标准库可以分为两部分:
标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C
语言。
面向对象类库: 这个库是类及其相关函数的集合。
C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。
2 标准函数库
标准函数库分为以下几类:
2.1 输入/输出 I/O
iostream 库是一个面向对象的库,它使用流提供输入和输出功能。
标准对象
作为 iostream 库的一部分,头文件声明某些对象,这些对象用于对标准输入和输出
执行输入和输出操作。
2022-6-15
华为保密信息,未经授权禁止扩散
第 1页, 共 22页
文档名称
文档密级
它们分为两组:它们是流行的 cin,cout,cerr 和 clog 以及它们的宽字符函数,声明为 wcin,w
cout,wcerr 和 wclog。
C++ iostream 的主要作用是让初学者有一个方便的命令行输入输出试验环境,在真实的
项目中很少用到 iostream,因此不必把精力花在深究 iostream 的格式化与 manipulat
or。
C 语言 stdio 格式化输入输出的缺点
1. 对编程初学者不友好
看看下面这段简单的输入输出代码。
#include
int main()
{
int i;
short s;
float f;
double d;
char name[80];
scanf("%d %hd %f %lf %s", &i, &s, &f, &d, name);
printf("%d %d %f %f %s", i, s, f, d, name);
}
2. 安全性(security)
3. 类型安全(type-safe)
iostream 对初学者很友好,用 iostream 重写与前面同样功能的代码:
#include
#include
using namespace std;
int main()
{
int i;
short s;
float f;
double d;
2022-6-15
华为保密信息,未经授权禁止扩散
第 2页, 共 22页
文档名称
文档密级
string name;
cin >> i >> s >> f >> d >> name;
cout << i << " " << s << " " << f << " " << d << " " << name << e
ndl;
}
这段代码恐怕比 scanf/printf 版本容易解释得多,而且没有安全性(security)方面的问题。
#include
using namespace std;
int main()
{
int number;
cout << "输入一个整数: ";
cin >> number;
cout << "输入的数字为: " << number;
return 0;
}
C++标准程序库中的所有标识符都被定义于一个名为 std 的 namespace 中。由于
namespace 的概念,使用 C++标准程序库的任何标识符时,可以有三种选择:
1、直接指定标识符。例如 std::ostream 而不是 ostream。完整语句如下:
std::cout << std::hex<< 3.4<< std::endl;
2、使用 using 关键字。
2022-6-15
华为保密信息,未经授权禁止扩散
第 3页, 共 22页
文档密级
文档名称
using std::cout;
using std::endl;
以上程序可以写成
cout << std::hex<< 3.4<< endl;
3、最方便的就是使用 using namespace std;
例如:
#include
#include
using namespace std;
这样命名空间 std 内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那
么以上语句可以如下写:
cout << hex<< 3.4<< endl;
2.2 字符串和字符处理
C 语言
C++
C++特有
一般一个 C++的老的带“.h”扩展名的库文件,比如 iostream.h,在新标准后的标准库中都有
一个不带“.h”扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都
塞进了“std”名字空间中。
但唯独 string 特别。
问题在于 C++要兼容 C 的标准库,而 C 的标准库里碰巧也已经有一个名字叫做“string.h”
的头文件,包含一些常用的 C 字符串处理函数,比如 strcmp。
这个头文件跟 C++的 string 类半点关系也没有,所以 并非 的“升级版
本”,他们是毫无关系的两个头文件。是旧的 C 头文件,对应的是基于 char*的字
符串处理函数; 是包装了 std 的 C++头文件,对应的是新的 string 类(看下
文); 是对应于旧 C 头文件的 std 版本。
语法:
string();
2022-6-15
华为保密信息,未经授权禁止扩散
第 4页, 共 22页
文档名称
文档密级
string( size_type length, char ch );
string( const char *str );
string( const char *str, size_type length );
string( string &str, size_type index, size_type length );
string( input_iterator start, input_iterator end );
字符串的构造函数创建一个新字符串,包括:
以 length 为长度的 ch 的拷贝(即 length 个 ch)
以 str 为初值 (长度任意),
以 index 为索引开始的子串,长度为 length, 或者
以从 start 到 end 的元素为初值.
例如,
string str1( 5, 'c' );
string str2( "Now is the time..." );
string str3( str2, 11, 4 );
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
显示
ccccc
Now is the time...
time
2.2.1 操作符(Operators)
语法:
==
>
<
>=
<=
!=
+
+=
[]
2022-6-15
华为保密信息,未经授权禁止扩散
第 5页, 共 22页
文档名称
文档密级
你可以用 ==, >, <, >=, <=, and !=比较字符串. 可以用 + 或者 += 操作符连
接两个字符串, 并且可以用[]获取特定的字符.
3 添加文本(append)
语法:
basic_string &append( const basic_string &str );
basic_string &append( const char *str );
basic_string &append( const basic_string &str, size_type index, size_type len );
basic_string &append( const char *str, size_type num );
basic_string &append( size_type num, char ch );
basic_string &append( input_iterator start, input_iterator end );
append() 函数可以完成以下工作:
在字符串的末尾添加 str,
在字符串的末尾添加 str 的子串,子串以 index 索引开始,长度为 len
在字符串的末尾添加 str 中的 num 个字符,
在字符串的末尾添加 num 个字符 ch,
在字符串的末尾添加以迭代器 start 和 end 表示的字符序列.
例如以下代码:
string str = "Hello World";
str.append( 10, '!' );
cout << str << endl;
显示
2022-6-15
华为保密信息,未经授权禁止扩散
第 6页, 共 22页
文档名称
Hello World!!!!!!!!!!
赋值(assign)
语法:
文档密级
basic_string &assign( const basic_string &str );
basic_string &assign( const char *str );
basic_string &assign( const char *str, size_type num );
basic_string &assign( const basic_string &str, size_type index, size_type len );
basic_string &assign( size_type num, char ch );
函数以下列方式赋值:
用 str 为字符串赋值,
用 str 的开始 num 个字符为字符串赋值,
用 str 的子串为字符串赋值,子串以 index 索引开始,长度为 len
用 num 个字符 ch 为字符串赋值.
例如以下代码:
string str1, str2 = "War and Peace";
str1.assign( str2, 4, 3 );
cout << str1 << endl;
2022-6-15
华为保密信息,未经授权禁止扩散
第 7页, 共 22页
文档名称
文档密级
显示
and
at
语法:
reference at( size_type index );
at()函数返回一个引用,指向在 index 位置的字符. 如果 index 不在字符串范围内, at() 将报告"
out of range"错误,并抛出 out_of_range 异常。 比如下列代码:
string text = "ABCDEF";
char ch = text.at( 2 );
显示字符 'C'.
交换(swap)
语法:
void swap( basic_string &str );
swap()函数把 str 和本字符串交换。例如:
string first( "This comes first" );
string second( "And this is second" );
first.swap( second );
cout << first << endl;
cout << second << endl;
显示:
2022-6-15
华为保密信息,未经授权禁止扩散
第 8页, 共 22页