C++学习笔记六
- 标准库的栈、队列、双向队列
- IO库的条件状态
- 输出缓冲区的管理
栈、队列、双向队列
栈
使用的头文件:#include<stack>
是一个容器
使用的方法:
empty()
,判断是否为空size()
,返回元素个数top()
,返回栈顶元素,不删除pop()
,删除栈顶元素,不返回push()
,压入栈顶
标准库的栈是基于数组的
队列
和栈类似。使用头文件:#include<queue>
双向队列
优化了的双向队列,向两端插入删除开销小,支持[]
操作符,但是性能比vector
差,占用更多内存
使用头文件#include <deque>
方法:
front()
返回第一个元素的引用back()
返回最后一个元素的引用begin()
返回第一个元素的迭代器-
end()
返回最后一个元素的迭代器
clear()
删除所有元素empty()
判断是否为空erase()
删除一个元素insert()
插入一个元素max_size()
返回能容纳的最大元素数pop_back()
、pop_front()
删除push_back()
、push_front()
插入
…
IO库的条件状态
流是一个概念,用来形容输入输出的信息
IO库的对象只有在没有出错的时候才能正常工作
检查有没有出错的方法:
if (cin)
...
// 或者
while (cin >> xxx)
...
提供这几种方法来访问和操纵流状态:
eof()
,判断是否读到了EOFfail()
,判断是否失败bad()
、good()
,判断是否处于可使用的状态clear()
,重设状态为有效
所有流对象包含一个条件状态成员,在出错的时候指示哪里出错了
输出缓冲区的管理
系统在输出前会把字符串存在缓冲区里面(C语言也是一样的)
缓冲区刷新的几种情况:
- 程序结束
- 缓冲区满了
- 使用endl显示刷新
- 使用
unitbuf
设置流的内部状态 - 将输出输出流关联,在输入流读入的时候将其刷新
unitbuf操纵符
使用unitbuf
刷新所有输出
例如
cout << unitbuf << "a" << "b" << nounitbuf;
等价于
cout << "a" << flush << "b" << flush;
输入输出绑定
使用tie()
进行绑定
它是istream或者ostream的方法,参数为一个ostream的指针
传递0
来打破该流上已经存在的绑定
cin.tie(&cout);
ostream *old_tie = cin.tie();
cin.tie(0);
cin.tie(&cerr);
cin.tie(0);
cin.tie(old_tie);