C++中流的概念
在程序设计中,数据输入输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作时通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。
C++中的流主要有以下三种:
- 标准I/O流:内存与标准输入输出设备之间信息的传递
- 文件I/O流:内存与外文件之间信息的传递
- 字符串I/O流:内存变量与表示字符串流的字符数组之间信息的传递
标准I/O流
这部分主要会用到cin,cout
,常见的就是内存与显示器或键盘进行信息传递。
文件I/O流
C++文件流用于对文件进行处理,需要在源代码中包含头文件iofstream
和fstream
。对于文件流,C++定义了三种新的数据类型,ofstream
, ifstream
, fstream
。
数据类型 | 描述 |
---|---|
ofstream | 输出文件流,可创建文件并向文件写入信息 |
ifstream | 输入文件流,可从文件中读取信息 |
fstream | 文件,同时拥有ofstream , ifstream 的功能 |
打开文件
使用open()
函数打开文件,open()
函数是ofstream
, ifstream
, ofstream
对象的一个成员。
void open(const char *filename, ios::openmode mode);
第一个参数要指定打开文件的名称和位置,第二个参数要指定文件被打开的模式。
模式标志 | 描述 |
---|---|
ios::app | 追加模式,所有写入都将追加到文件的末尾 |
ios::ate | 文件打开后定位到文件末尾 |
ios::in | 文件打开用于读取 |
ios::out | 文件打开用于写入 |
ios::trunc | 如果文件已经存在,其内容将在打开文件之前被截断,即把文件的长度设为0 |
关闭文件
使用close()
函数打开文件,close()
函数是ofstream
, ifstream
, ofstream
对象的一个成员。
void close();
字符串I/O流
要使用C++字符串I/O流,需要在头文件中包含sstream
。
对于字符串I/O流,C++也有三种新的数据类型,istringstream
,ostringstream
,stringstream
分别用来进行输入,输出,输入输出。一般情况下使用stringstream
,因为字符串通常涉及频繁的输入输出。
字符串I/O流常用于数据形式的转换,以下示例代码从文件中一行行读取数据,并将数据保存到结构体entry
中。
while (std::getline(inputFile, line))
{
std::istringstream iss(line);
DataEntry entry;
iss >> entry.custNo >> entry.xCoord >> entry.yCoord >> entry.demand >> entry.readyTime >> entry.dueDate >> entry.serviceTime;
data.push_back(entry);
}
参考
C++ 流(stream)总结
C++文件和流|菜鸟教程
C++字符串流stringstream与string知识介绍与用法小结