学学学,不断地学。
一些IO库类型和头文件
头文件 | 类型 |
---|---|
流 iostream | istream 从流中读取数据 ostream 向流写入数据 iostream 读写流 |
文件 fstream | ifstream 从文件中读取数据 ofstream 向文件写入数据 fstream 读写文件 |
string sstream | istringstream 从string中读取数据 ostringstream 向string写入数据 stringstream 读写string |
wchat_t 类型的数据,即宽字符。宽字符版本的类型和函数的名字以一个 w 开始(wcin、wcout、wcerr等),这个版本与其对应的普通版本的类型定义在同一个头文件(istream 和 wistream)。
通过继承机制,标准库使我们忽略不同类型的流之间的差异。即标准库流(<<、>>)的特性可以无差别地应用于普通流、文件流和 string 流,以及 char 或 宽字符流版本。
输出缓冲区
操纵符 endl(换行后刷新)、flush(刷新)、ends(出入空字符后刷新)、unitbuf(对 cerr 设置)
当输入流和输出流关联在一起时,任何试图从输入流读取数据的操作都会先刷新关联的输出流。
文件输入输出
IO类型 文件流名 | 作用 |
---|---|
fstream fstrm | 创建一个未绑定的文件流 |
fstream fstrm(s) | 创建一个文件流 fstream,并打开名为 s 的文件 |
fstream fstrm(s, mode) | 创建一个文件流 fstream,并以指定 mode 打开名为 s 的文件 |
fstrm.open(s) | 打开名为 s 的文件,并与 fstrim 绑定,返回 void |
fstrm.close() | 关闭与 fstrm 绑定的文件,返回 void |
fstrm.is_open(s) | 判断与 fstrm 关联的文件是否打开,返回 bool |
PS : s 可以是 string 类型,或者是一个指向C风格字符串的指针。
string
对整行文本进行处理时,通过 istringstream 处理行内的单个单词。
-------------------------------------------------------------- \ 我 是 分 割 线 / --------------------------------------------------------------
小昭 の 练习作答
8.1
#include<iostream>
#include<string>
std::istream& sadas(std::istream& in){
in.clear();
string str;
while(in >> str) std::cout << str << endl;
in.clear();
return in;
}
int main(){
sadas(std::cin);
return 0;
}
8.2 略
8.3 输入的字符为 结束标识 时,如 ctrl + z。
8.4~8.5
ifstream in(ifile);
vector<string> vec;
if(in){
for(auto s;getline(in,s);) vec.push_back(s);
}
ifstream in(ifile);
vector<string> vec;
if(in){
for(auto s;in >> s;) vec.push_back(s);
}
8.6~8.8 书店程序略
8.9
int main{
string str;
getline(cin, str);
istringstream lalala(str);
sadas(lalala);
return 0;
}
8.10
ifstream read(ifile);
vector<string> vec;
if(read){
for(auto s;getline(in,s);) vec.push_back(s);
}
for(auto &v : vec){
string word
istringstream lala(v);
while(lalala >> word) cout << word;
}
8.11 略
8.12 不会。
8.13
摸了
8.14 避免 复制向量中的每个对象 和 意外更改向量中元素的值。