《C++Primer》复习——with C++11 [3]
1.我们的程序经常使用很多IO库,用来输入输出例如:istream(输入流)类型,提供输入操作。
ostream(输出流)类型, 提供输出操作。
cin, 一个istream对象,从标准输入读取数据。
cout,一个ostream对象,向标准输出写数据。
cerr, 一个ostream对象,通常用于输出程序错误消息,写入到标准错误。
>>/<<运算符,用来从一个istream/ostream对象输入输出数据。
不能对IO对象拷贝和赋值,由于不能拷贝IO对象,因此不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用时不能const的。
刷新输出缓冲区:之前通过操纵符endl完成换行并刷新缓冲区,两个类似的操作flush 和ends,flush刷新缓冲区,但不输出任何额外的自符,ends向缓冲区输出一个空字符并且刷新缓冲区。
tie方法可以将一个流关联到另外一个流,例如:cin.tie(&cout); ostream *old_tie = cin.tie(nullptr);
cin.tie(&cerr); cin.tie(old_tie);
2.文件的输入和输出,头文件fstream定义了三个类型来支持文件,IO:ifstream从一个给定文件读取数据,ofstream向一个给定的文件写入数据,以及fstream可以读写给定文件。
fstream fstrm; //创建一个未绑定的文件流
fstream fstrm(s); //创建一个fstream,并打开名为s的文件,s可以使string类型,或者是一个纸箱C风格字符串的指针。
fstream fstrm(s, mode);//指定mode打开文件
fstream.open(s); //打开名为s的文件,并将文件与fstrm绑定。s可以使一个string或者一个纸箱C风格的字符串指针,默认的mode依赖于fstream的类型
fstrm.close(); 关闭与fstrm绑定的文件
fstrm.is_open(); //返回一个bool,之处与fstrm关联的文件是否打开成功且尚未关闭
ifstream in(ifile);
ofstream out;
out.open(ifile + ".copy");
当一个fstream对象销毁时,close会自动的被调用
3.文件模式,每个流都有一个关联的文件模式,用来之处如何使用文件,下表列出了文件模式和他们的含义
in 以读方式打开
out 以写方式打开
app 每次写操作前军定位到文件末尾
ate 打开文件后立即定位到文件末尾
trunc 截断文件
binary 以二进制方式进行IO
以out模式打开文件会丢失已有数据,默认情况下,我们打开一个ofstream时,文件的内容会被丢弃,组织一个ofstream清空给定文件内容给定方法是同事指定app模式。
//在这几条语句中,file1都会被截断
ofstream out("file1"); //隐含以输出模式打开文件并截断文件
ofstream out2("file1", ofstream::out); //隐含的截断文件
ofstream out3("file1", ofstream::out | ofstream::trunc);
//为了保留文件内容,显示指定app模式
ofstream app("file2", ofstream::app); //隐含为输出模式
ofstream app2("file2", ofstream:: out | ofstream::app);
每次调用open都会确定文件模式,对于一个流,每当打开文件时,都可以改变其文件模式。
fstream out; //未指定打开模式
out. open("scratchpad");//模式隐含设置为输出和截断
out. close();
out.open("precious", ofstream::app); //模式为输出和追加
4.istringstream和ostringstream绑定一个string对象,这个对象可用<<和>>方法来输入获取一个string对象中的内容,它就像一块和string绑定的内存区域,当你使用>>方法则向其中写入C风格字符串或者string,它也向一个缓冲区,暂时容纳你的输入和输出,然后调用他的str方法返回这个整片的字符串。两个例子如下:
struct PersonInfo
{ string name;
vector<string> phone;
};
string line, word;
vector<PersonInfo> people;
while (getline(cin, line))
{ PersonInfo info;
istringstream record(line);
record >> info.name;
while (record >> word)
info.phones.push_back(word);
people.push_back(info);
}
for (const auto &entry : people)
{ ostringstream formatted, badNums;
for (const auto &nums : entry.phones)
{ if (!valid(nums)) {
badNums << " " << nums;
}else
formatted << " " << format(nums);
}
if (badNums.str().empty())
os << entry.name << " " << formated.str() << endl;
else
cerr <<.......
}
《C++Primer》复习——with C++11 [3]的更多相关文章
- 《C++Primer》复习——with C++11 [4]
考虑到STL的掌握主要靠的是练习,所以对于STL这部分,我把书中的练习都做一遍,加深印象.这些练习是第9.10.11.17章的,分别是顺序容器.泛型算法和关联容器等. ——10月22日 /*----- ...
- 《C++Primer》复习——with C++11 [1]
1.头文件中不应包含using声明,因为头文件的内容会拷贝到所有引用到他的文件中去,如果头文件里有谋个using声明,那么每个使用了该头文件的文件就会有这个声明,由于不经意间包含了一些名字,反而可能产 ...
- 《C++Primer》复习——with C++11 [2]
1.数组引用形参,C++允许将变量定义成数组的引用,给予同样的道理,形参也可以是数组的引用,此时引用形参绑定到对应的实参上,也就是绑定到数组上 ]) { for (auto elem : arr) c ...
- c++primer复习(六)—面向对象编程
1 C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定,两个条件(基类引用或指针.虚函数)缺一不可 虚函数的默认实参将发生静态绑定 2 继承层次的根类一般都需要定义虚析构函数 3 任意非st ...
- c++primer复习(一)
1 const对象默认为文件的局部变量(P50) a.cpp ; b.cpp extern int a;//undefined reference to "a" a.cpp ; b ...
- 【C语言学习】《C Primer Plus》第11章 字符串和字符串函数
学习总结 1.字符串(character String)是以空字符串(\o)结尾的char数组. 2.gets()方法代表get String,它从系统的标准输入设备(通常是键盘)获取一个字符串,当字 ...
- c++ primer复习(四)
1 标准库容器 顺序容器:vector.list.deque 容器适配器:stack.queue.priority_queue 2 容器元素类型约束: 容器元素类型必须支持复制和赋值,因为容器存放的都 ...
- c++ primer复习(五):类
一:基本内容 1 类 数据成员:用于存储与类对象相关联的状态 成员函数:对数据成员进行操作 类将接口与实现分离,接口指定了类支持的操作,操作的具体实现细节是类的设计者才需要了解 2 类成员 类成员可以 ...
- c++ primer复习(三)
1 istream.ostream类型,cin.cout.cerr是istream或ostream类型的具体的对象,<<和>>是操纵符 getline函数的参数是istream ...
随机推荐
- HTML5游戏开发,剪刀石头布小游戏案例
剪刀石头布,非常可爱的小游戏,相信大家都非常的怀念这款小游戏,小时候也玩过很多次,陪伴着我的童年的成长,现在是不是还会玩一下,剪刀石头布游戏的规则我们都知道是:剪刀剪布,石头砸剪刀,布包石头.跟朋友. ...
- 快速调试的VS设置
这是2013年“惹”的“祸”. 自己一直使用着VS2012,以前的调试是相当方便的,或许是之前的同事设置好的VS,我一直不会去注意我停掉调试(停掉调试的意思是:将状态1正在调试的状态,变更为状态2待启 ...
- [转]JAVA三大框架SSH和MVC
Java—SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就 ...
- 关于DB2 SQL0805N找不到程序包的错误解决办法
DB2在执行SQL语句的时候会使用内部定义的包(package)来保持不同级别的游标的稳定性, 包的名字就是“ULLID.SYSLH2XX“. DB2 里面默认的时候会创建3个这样的包即SYSLH20 ...
- redistribute_prefix
使用分发列表和前缀列表控制路由 拓扑如下 将基本环境(ip和路由协议)配置好,所得到的各个路由表如下 R1: R2: R3: EIGRP和OSPF间的双向重分发 1. 在R2上做重分发 2. ...
- iOS 最新版 CocoaPods 的安装使用
当在开发iOS应用时,会经常使用到很多的第三方开源类库,一般的方法是直接从GitHub下载,然后拖到项目中使用,如果该开源类库不依赖其他的类库,就可以直接使用:如果该开源类库还依赖一些其他的类库,则需 ...
- UI1_UISlider与UISegment
// // ViewController.m // UI1_UISlider与UISegment // // Created by zhangxueming on 15/7/7. // Copyrig ...
- 4月12日学习笔记——jQuery操作属性和样式
区分 DOM 属性和元素属性 <img src="images/image.1.jpg" id="hibiscus" alt="Hibiscus ...
- debian终端菱形乱码修复
最简安装debian的时候由于没有中文字库,若选择看中文环境会出现菱形乱码.先把zh.utf8换为us.utf8看着好顺眼些.按空格键取消已选的zh.utf8选项按空格键选择us.utf8选项ok
- Windows Phone 8.1开发:如何让ListView滚动到顶部,回到第一条?
Windows Phone 8.1开发中,ListView向下滑动了半天,用户如果突然想回头看看第一条数据怎么办? 如何让listView滚动到顶部,回到第一条? 很简单,一行代码.调用ListVie ...