C++标准模板库(STL)中提供了丰富的与I/O操作相关的函数,这些函数主要封装在iostream、fstream、sstream等相关头文件中,覆盖了控制台输入输出、文件读写、字符串流处理等多种场景,是C++程序实现数据交互的核心工具。

控制台I/O相关STL函数
控制台I/O是最基础的使用场景,相关函数主要定义在<iostream>头文件中,常用的函数如下:
基础输入输出函数
std::cin和std::cout是最常用的流对象,配合提取运算符>>和插入运算符<<实现基础输入输出,同时还有对应的函数版本:
get():读取单个字符,包括空白字符,返回读取的字符,失败返回EOFgetline():读取一行字符串,直到遇到换行符,默认丢弃换行符put():输出单个字符
以下是基础控制台I/O函数的使用示例:
#include <iostream>
#include <string>
int main() {
// 使用get读取单个字符
char c;
std::cout << "请输入一个字符: ";
c = std::cin.get();
std::cout.put(c) << std::endl;
// 清空输入缓冲区,避免换行符影响后续读取
std::cin.ignore(1024, 'n');
// 使用getline读取一行字符串
std::string line;
std::cout << "请输入一行文本: ";
std::getline(std::cin, line);
std::cout << "你输入的内容是: " << line << std::endl;
return 0;
}
格式化控制函数
STL提供了多个函数用于控制输出的格式,这些函数定义在<iomanip>头文件中:
setw(int n):设置输出字段的宽度为n个字符setprecision(int n):设置浮点数的精度为n位setfill(char c):设置字段填充字符为cfixed:以固定小数位格式输出浮点数hex/oct/dec:设置整数输出为十六进制、八进制、十进制
格式化函数的使用示例:
#include <iostream>
#include <iomanip>
int main() {
double num = 3.1415926;
// 设置精度为3位,固定小数格式
std::cout << std::fixed << std::setprecision(3) << num << std::endl;
int val = 255;
// 分别以十进制、十六进制、八进制输出
std::cout << std::dec << val << std::endl;
std::cout << std::hex << val << std::endl;
std::cout << std::oct << val << std::endl;
// 设置字段宽度和填充字符
std::cout << std::setfill('*') << std::setw(10) << 123 << std::endl;
return 0;
}
文件I/O相关STL函数
文件操作相关的函数和类定义在<fstream>头文件中,主要通过std::ifstream(输入文件流)、std::ofstream(输出文件流)、std::fstream(读写文件流)三个类实现,常用成员函数如下:
文件打开与关闭函数
open(const char* filename, ios_base::openmode mode):打开指定路径的文件,设置打开模式close():关闭当前打开的文件is_open():判断文件是否成功打开,返回布尔值
文件读写函数
文件流的读写函数和控制台流类似,同样支持>>、<<运算符,也有get()、getline()、put()等成员函数,此外还有read()和write()函数用于二进制读写:
read(char* buffer, streamsize size):从文件读取size个字节到buffer中write(const char* buffer, streamsize size):将buffer中的size个字节写入文件
文件I/O函数的使用示例:
#include <iostream>
#include <fstream>
#include <string>
int main() {
// 写入文件
std::ofstream outFile;
outFile.open("test.txt", std::ios::out | std::ios::trunc);
if (!outFile.is_open()) {
std::cout << "文件打开失败" << std::endl;
return 1;
}
outFile << "这是写入文件的第一行" << std::endl;
outFile << "这是写入文件的第二行" << std::endl;
outFile.close();
// 读取文件
std::ifstream inFile("test.txt", std::ios::in);
if (inFile.is_open()) {
std::string line;
while (std::getline(inFile, line)) {
std::cout << line << std::endl;
}
inFile.close();
}
return 0;
}
字符串流I/O相关STL函数
字符串流相关功能定义在<sstream>头文件中,主要通过std::istringstream(输入字符串流)、std::ostringstream(输出字符串流)、std::stringstream(读写字符串流)实现,常用于字符串和其他数据类型的转换、字符串分割等场景:
str():获取或设置字符串流内部的字符串str(const string& s):将字符串s设置为流的内部字符串
字符串流函数的使用示例:
#include <iostream>
#include <sstream>
#include <string>
int main() {
// 字符串转其他类型
std::string numStr = "12345";
std::istringstream iss(numStr);
int num;
iss >> num;
std::cout << "转换后的整数: " << num << std::endl;
// 其他类型转字符串
std::ostringstream oss;
double d = 3.14;
oss << d;
std::string dStr = oss.str();
std::cout << "转换后的字符串: " << dStr << std::endl;
// 字符串分割
std::string data = "apple,banana,orange";
std::stringstream ss(data);
std::string item;
while (std::getline(ss, item, ',')) {
std::cout << item << std::endl;
}
return 0;
}
其他常用I/O辅助函数
除了上述分类的函数外,STL还提供了一些通用的I/O辅助函数:
std::ios_base::sync_with_stdio(bool sync):设置是否同步C++流和C标准流,关闭同步可以提升cin/cout的效率std::cin.tie(nullptr):解除cin和cout的绑定,进一步加快输入速度std::flush:刷新输出缓冲区,确保缓冲区内容立即输出
这些辅助函数的使用示例:
#include <iostream>
int main() {
// 关闭流同步,提升输入输出效率
std::ios::sync_with_stdio(false);
// 解除cin和cout的绑定
std::cin.tie(nullptr);
int a, b;
std::cin >> a >> b;
std::cout << a + b << std::flush; // 刷新缓冲区输出结果
return 0;
}