C++学习笔记六

C++学习笔记六

  1. 标准库的栈、队列、双向队列
  2. IO库的条件状态
  3. 输出缓冲区的管理

栈、队列、双向队列

使用的头文件:#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(),判断是否读到了EOF
  • fail(),判断是否失败
  • bad()good(),判断是否处于可使用的状态
  • clear(),重设状态为有效

所有流对象包含一个条件状态成员,在出错的时候指示哪里出错了

输出缓冲区的管理

系统在输出前会把字符串存在缓冲区里面(C语言也是一样的)

缓冲区刷新的几种情况:

  1. 程序结束
  2. 缓冲区满了
  3. 使用endl显示刷新
  4. 使用unitbuf设置流的内部状态
  5. 将输出输出流关联,在输入流读入的时候将其刷新

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);

猜你喜欢

转载自blog.csdn.net/weixin_45206746/article/details/114418062
今日推荐