流缓冲区和其他任意的存储空间一样,可以使用迭代器进行访问。使用流缓冲区的迭代器类,其实也是使用stream成员函数的一种形式。类streambuf提供的迭代器有两类:①符合输入型迭代器和输出型迭代器的规格和要求;②从流缓冲区读取或写入单个字符时。流缓冲区中的迭代器将字符层面的输入与输出,归入C++STL的算法管辖范围内。
模板类istreambuf_iterator和ostreambuf_iterator用于从型别为basic_streambuf的对象中读取或写入单个字符。使用上述迭代器均须包含头文件<iterator>。流缓冲区迭代器是流迭代器的特殊形式,唯一区别在于元素是字符。
1.输出流缓冲区迭代器
例如,
第一行代码根据cout构造一个输出型迭代器,型别为ostreambuf_ iterator。除了传递output stream之外,可以直接传递指针,指向stream缓冲区。第二行和第三行代码分别实现定义一个字符串和将之复制到输出缓冲区的功能,copy()函数执行之后,字符串string随之被输出到屏幕上。
输出流缓冲区迭代器的操作函数和输出流的迭代器近似。其成员函数的各项功能见表7-5。使用一个缓冲区将迭代器初始化,调用fail()函数检查迭代器是否用于输出。如果任何一个字符的预写入操作失败,fail()函数会返回true。运算符operator进行的任何改写操作均无效。
表7-5 输出流缓冲区迭代器成员函数的各项功能
2.输入流缓冲区迭代器
输入流缓冲区迭代器的所有操作函数和类istream迭代器的所有操作函数近似。其成员函数的各项功能见表7-6。通常,成员函数equal()用于判断两个输入流缓冲区迭代器是否相等。当两个流缓冲区迭代器都是或都不是end-of-stream迭代器时,两者均视为相等。(www.xing528.com)
表7-6 输入流缓冲区迭代器成员函数的各项功能
需要注意的有以下两点:
1)从流当前位置到流尾部之间的范围用两个迭代器定义出来:istreambuf_iterator<charT,traits>(stream)和istreambuf_iterator<charT,traits>(),其中stream的型别是bas-ic_istream<charT,traits>或basic_strrambuf<charT,traits>。
2)不可能以istreambuf_iterators建立出一个子序列。
下面给出一个缓冲区迭代器的实例。其实现的功能为:使用流缓冲区迭代器简单的输出所有读取到的字符。
上述代码的输出结果为:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。