输入输出库
C++ 输入输出库(IOStream Library)提供了一组用于处理输入输出操作的类和函数,使得在 C++ 中进行数据流处理变得简单和直观。输入输出库主要包含以下几个部分:
1. 基本输入输出流类
1.1 iostream
类
std::cin
:标准输入流,通常连接到键盘。
std::cout
:标准输出流,通常连接到屏幕。
std::cerr
:标准错误流,用于输出错误信息,通常连接到屏幕,不带缓冲。
std::clog
:标准日志流,用于输出日志信息,通常连接到屏幕,带缓冲。
示例
2. 文件输入输出流类
2.1 fstream
类
std::ifstream
:文件输入流类,用于从文件读取数据。
std::ofstream
:文件输出流类,用于向文件写入数据。
std::fstream
:文件读写流类,同时支持文件的读取和写入。
示例
3. 字符串流类
3.1 sstream
类
std::istringstream
:字符串输入流类,用于从字符串读取数据。
std::ostringstream
:字符串输出流类,用于向字符串写入数据。
std::stringstream
:字符串读写流类,同时支持字符串的读取和写入。
示例
4. 格式化输入输出
C++ 输入输出库提供了多种格式化输入输出的方法,包括设置流格式、控制符、操纵器等。
4.1 设置流格式
使用流成员函数设置流格式,如 std::ios::setf
和 std::ios::unsetf
。
4.2 控制符和操纵器
使用标准库提供的控制符和操纵器进行格式化输出,如 std::setw
、std::setprecision
、std::fixed
等。
5. 文件模式和错误处理
5.1 文件模式
打开文件时,可以指定文件模式,如 std::ios::in
、std::ios::out
、std::ios::binary
、std::ios::app
等。
5.2 错误处理
使用流的成员函数如 std::ios::good
、std::ios::fail
、std::ios::bad
和 std::ios::eof
检查流的状态。
字符串库
C++ 字符串库提供了丰富的功能,用于创建和操作字符串。主要包含两种字符串类型:std::string
(用于处理单字节字符的字符串)和 std::wstring
(用于处理宽字符的字符串)。以下是 C++ 字符串库的详细介绍和一些常见操作。
1. std::string
类
std::string
是用于处理单字节字符(如 ASCII 字符)的字符串类。它在 <string>
头文件中定义。
基本操作
字符串常见成员函数
length()
或 size()
:返回字符串长度。
empty()
:检查字符串是否为空。
clear()
:清空字符串内容。
append()
:在字符串末尾添加内容。
insert()
:在指定位置插入内容。
erase()
:删除指定位置的字符或子字符串。
substr()
:返回子字符串。
find()
:查找子字符串或字符的位置。
replace()
:替换子字符串。
示例
2. std::wstring
类
std::wstring
是用于处理宽字符(如 Unicode 字符)的字符串类。它在 <string>
头文件中定义。
示例
3. 字符串转换
C++ 提供了一些函数用于在字符串和其他数据类型之间进行转换。常见的转换函数包括:
std::to_string()
:将数值转换为 std::string
。
std::stoi()
、std::stol()
、std::stoll()
:将 std::string
转换为整数类型。
std::stof()
、std::stod()
、std::stold()
:将 std::string
转换为浮点数类型。
示例
4. C 字符串与 C++ 字符串转换
C++ 提供了方便的方法在 C 风格字符串(即字符数组)和 C++ 字符串之间进行转换。
示例
5. 字符串流
C++ 提供了字符串流类,用于将字符串作为输入或输出流进行操作。常见的字符串流类包括 std::istringstream
、std::ostringstream
和 std::stringstream
。
示例
正则库
C++11 引入了正则表达式库,用于支持正则表达式的匹配、搜索和替换操作。C++ 正则表达式库位于 <regex>
头文件中,提供了一组类和函数来处理正则表达式。
1. 正则表达式库的主要组件
1.1 std::regex
std::regex
类表示一个正则表达式对象,可以用于匹配字符串。
1.2 std::smatch
和 std::cmatch
std::smatch
:用于存储字符串匹配结果的类。
std::cmatch
:用于存储 C 风格字符串匹配结果的类。
1.3 std::regex_match
和 std::regex_search
std::regex_match
:用于整个字符串的匹配。
std::regex_search
:用于搜索字符串中的模式。
1.4 std::regex_replace
用于将正则表达式匹配的部分替换为新的字符串。
2. 使用示例
2.1 匹配整个字符串
std::regex_match
用于检查整个字符串是否与正则表达式匹配。
2.2 搜索字符串中的模式
std::regex_search
用于搜索字符串中是否包含匹配正则表达式的子串。
2.3 搜索所有匹配的模式
可以使用 std::regex_search
的迭代器版本来查找字符串中的所有匹配项。
2.4 替换匹配的子串
std::regex_replace
用于将正则表达式匹配的部分替换为新的字符串。
3. 正则表达式的标志
正则表达式库提供了一些标志,用于修改正则表达式的行为:
std::regex_constants::icase
:忽略大小写。
std::regex_constants::nosubs
:不保存匹配结果。
std::regex_constants::optimize
:优化匹配速度。
std::regex_constants::collate
:使用区域设置的规则进行字符比较。
示例:忽略大小写的匹配
4. 使用命名捕获组(C++20 引入)
C++20 引入了命名捕获组功能,使得匹配结果的管理更加方便。
示例
时间库
C++11 引入了 <chrono>
头文件,提供了强大而灵活的时间库,用于处理时间点、时间段和时钟。C++ 时间库通过类型安全的方式处理时间和日期,避免了传统 C 风格的时间处理中的许多陷阱。以下是 C++ 时间库的详细介绍和一些常见操作。
1. 基本组件
C++ 时间库主要由以下三个基本组件构成:
- 时钟(Clocks):获取当前时间点的来源。
- 时间点(Time Points):特定时间点的表示。
- 时间段(Durations):时间段或时间间隔的表示。
1.1 时钟
时钟是获取当前时间点的来源。C++ 提供了几种常用的时钟:
std::chrono::system_clock
:系统时钟,表示当前的壁钟时间。
std::chrono::steady_clock
:单调时钟,不受系统时间调整影响。
std::chrono::high_resolution_clock
:高精度时钟,通常是 system_clock
或 steady_clock
的别名。
示例:获取当前时间点
1.2 时间点
时间点表示特定的时间点,通常与时钟关联。
示例:获取当前时间点并格式化输出
1.3 时间段
时间段表示一段时间或时间间隔。可以通过减去两个时间点来获得时间段。
示例:计算程序执行时间
2. 时间段操作
C++ 时间库提供了多种时间段类型(如秒、毫秒、微秒等)和操作时间段的方法。
示例:时间段类型和操作
3. 时钟和时间点操作
可以通过时钟获取当前时间点,通过时间点计算时间间隔或进行比较。
示例:时钟和时间点操作
4. 其他常见操作
4.1 睡眠
std::this_thread::sleep_for
和 std::this_thread::sleep_until
用于使线程休眠指定的时间段或直到指定的时间点。
4.2 定时器
可以使用时钟和时间点实现简单的定时器功能。