c++11 标准模板(STL)(std::basic_streambuf)(二)

news2024/11/14 17:04:03
定义于头文件 <streambuf>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_streambuf;

basic_streambuf 控制字符序列的输入与输出。它包含下列内容并提供到它们的访问:

1) 受控制字符序列,又称为缓冲区,它可含有为输入操作缓冲的输入序列(又称为获取区),和/或为输出操作缓冲的输出序列(又称为放置区)。

2) 关联字符序列,又称作(对于输入)或(对于输出)。它可以是通过 OS API 访问的实体(文件、 TCP 接头、串行端口、其他字符设备),或者可以是能转译成字符源或池的对象( std::vector 、数组、字符串字面量)。

I/O 流对象 std::basic_istream 及 std::basic_ostream ,还有所有导出自它们的对象( std::ofstream 、 std::stringstream 等),都完全以 std::basic_streambuf 实现。

成员函数

析构 basic_streambuf 对象

std::basic_streambuf<CharT,Traits>::~basic_streambuf

virtual ~basic_streambuf();

此析构函数为空:此 basic_streambuf 的成员(指针和本地环境)与此析构函数返回后的通常对象析构序列一致的顺序析构。然而,因为它被声明为公开虚函数,故通过指向基类的指针删除允许导出自 std::basic_streambuf 的对象。

参数

(无)

受保护成员函数

构造 basic_streambuf 对象

std::basic_streambuf<CharT,Traits>::basic_streambuf

protected:
basic_streambuf();

(1)

protected:
basic_streambuf(const basic_streambuf& rhs);

(2)(C++11 起)

1) 构造 basic_streambuf 对象,初始化六个成员( eback()gptr()egptr()pbase()pptr()epptr() )为空指针值, locale 成员为 std::locale() ,构造时的全局 C++ 本地环境的副本。

2) 从 rhs 复制构造,初始化六个指针和 locale 对象为 rhs 所保有值的副本。注意这是浅复制:新构造的 basic_streambuf 的指针指向的字符数组与 rhs 的相同。

两个构造函数均为受保护,而且仅为具体的 streambuf 类,如 std::basic_filebuf 、 std::basic_stringbuf 或 std::strstreambuf 调用。

参数

rhs-要复制的 streambuf 对象

注意

C++11 前, basic_streambuf 或其任何导出类是否可复制构造 (CopyConstructible) 是未指定的( LWG 问题 421 ),而不同的 C++ 库实现提供不同的选项。

替换 basic_streambuf 对象

std::basic_streambuf<CharT,Traits>::operator=

basic_streambuf& operator=( const basic_streambuf& other );

(C++11 起)

赋值 other 的数据成员给 *this 。

参数

other-要复制的流缓冲

返回值

*this

异常

(无)

交换二个 basic_streambuf 对象

std::basic_streambuf<CharT,Traits>::swap

void swap( basic_streambuf& other );

(C++11 起)

交换流缓冲与 other 的内容。

参数

other-要交换内容的流缓冲

返回值

(无)

异常

(无)

调用示例

#include <iostream>
#include <fstream>

int main()
{
    std::filebuf* fbp = new std::filebuf;
    fbp->open("test.txt", std::ios_base::out);
    fbp->sputn("Hello\n", 6);
    std::streambuf* sbp = fbp;
    delete sbp; // 关闭文件,冲入并写入输出
    std::ifstream f("test.txt");
    std::cout << f.rdbuf(); // 证明
}

 输出

受保护成员函数

本地环境

调用 imbue()

std::basic_streambuf<CharT,Traits>::pubimbue, 
std::basic_streambuf<CharT,Traits>::imbue

std::locale pubimbue( const std::locale& loc );

(1)

protected:
virtual void imbue( const std::locale& loc );

(2)

更改关联的本地环境。

1) 设置 loc 为本地环境。调用最终导出类的 imbue(loc)

2) 此函数的基类版本无效果。导出类可覆写此函数以提示本地环境的更改。最终导出类可以在 imbue() 的调用间缓存本地环境和成员平面。

参数

loc-要关联的 locale 对象

返回值

1) 先前关联的本地环境。

 

获得相关本地环境的副本

std::basic_streambuf<CharT,Traits>::getloc

std::locale getloc() const;

返回关联的本地环境。

关联的本地环境是在最后一次调用 pubimbue() 时提供的值,或若未调用过该函数,则为在构造 streambuf 时全局本地环境的值( std::locale )。

参数

(无)

返回值

关联的本地环境。

更改关联的本地环境

std::basic_streambuf<CharT,Traits>::pubimbue, 
std::basic_streambuf<CharT,Traits>::imbue

std::locale pubimbue( const std::locale& loc );

(1)

protected:
virtual void imbue( const std::locale& loc );

(2)

更改关联的本地环境。

1) 设置 loc 为本地环境。调用最终导出类的 imbue(loc)

2) 此函数的基类版本无效果。导出类可覆写此函数以提示本地环境的更改。最终导出类可以在 imbue() 的调用间缓存本地环境和成员平面。

参数

loc-要关联的 locale 对象

返回值

1) 先前关联的本地环境。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

专项练习9

目录 一、选择题 1、在 JavaScript 中&#xff0c;用于阻止默认事件的默认操作的方法是 2、以下代码执行后&#xff0c;result 的值为&#xff08;&#xff09; 3、不能从字符串 const str qwbewrbbeqqbbbweebbbbqee;中能得到结果 ["b", "bb", "bbb…

实时在线云消费机、考勤门禁控制器、网络读卡器服务端C# Socket源码

消费机UDP通讯协议介绍&#xff1a; 设备向服务器发送的指令格式&#xff0c;每个字段用半角逗号(,)分隔。序号指令名称指令格式指令说明示例1响应服务器的搜索100,包序列号,终端IP,子网掩码,网关IP,远程电脑主机IP,端口号,终端硬件号响应电脑发出的搜寻局域网内所有终端设备指…

【Python 基础篇】Python 异常处理

文章目录 引言一、Python异常概述二、常见的内置异常三、异常处理语句四、异常捕获和处理五、实例演示六、总结 引言 在软件开发中&#xff0c;错误和异常是难以避免的。当我们编写Python代码时&#xff0c;有时候会遇到各种各样的问题&#xff0c;例如无效的输入、文件不存在…

hello算法笔记之树

一、二叉树 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含一个「值」和两个「指针」。 在二叉树中&#xff0c;除叶节点外&#xff0c;其他所有节点都包含子节点和非空子树。 一些术语&#xff1a; 「根节点 Root Node」&#xff1a;位于二叉树顶…

VNC虚拟网络控制台(概述、windows系统连接linux系统演示)

第三阶段基础 时 间&#xff1a;2023年6月22日 参加人&#xff1a;全班人员 内 容&#xff1a; VNC虚拟网络控制台 目录 一、VNC概述 二、VNC基本上是由两部分组成 三、VNC特点 四、工作流程 五、安装 六、操作演示Windiws10系统远程控制linux 服务端&#xff1a;…

window版安装kafka并提供启动快捷脚本

kafka下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1DpcGXvpTYAcG_fvS-p9-3g?pwd1234 提取码&#xff1a;1234 官网&#xff1a;https://kafka.apache.org/downloads 注意不需要单独安装zk&#xff0c;里面包括zk Kafka解压包目录不要太深了&#xff0c…

养老院人员跌倒检测识别算法

养老院人员跌倒检测识别预警系统通过yolov5python网络模型技术&#xff0c;养老院人员跌倒检测识别预警算法对跌倒事件进行识别和分析&#xff0c;当检测到有人员跌倒时&#xff0c;将自动发出警报提示相关人员及时采取措施。YOLOv5是一种单阶段目标检测算法&#xff0c;该算法…

CTF-Show密码学【Base64、栅栏密码、16进制】

题目内容 密文&#xff1a;53316C6B5A6A42684D3256695A44566A4E47526A4D5459774C5556375A6D49324D32566C4D4449354F4749345A6A526B4F48303D 提交格式&#xff1a;KEY{XXXXXXXXXXXXXX}工具下载&#xff1a;https://www.lanzoui.com/i9fn2aj萌新_密码13 分析和解决过程 初步分析…

【Python 基础篇】Python 面向对象编程:理解与实践

文章目录 一、引言二、类与对象三、封装与访问控制四、继承与多态&#xff08;第一部分&#xff09;五、方法重写与多态&#xff08;第二部分&#xff09;六、抽象类与接口1、抽象类2、接口 七、类的关联与组合1、关联关系2、组合关系 八、面向对象设计原则1、SOLID原则2、设计…

实验 4:排序与查找

东莞理工的学生可以借鉴&#xff0c;请勿抄袭 1.实验目的 通过实验达到&#xff1a; 理解典型排序的基本思想&#xff0c;掌握典型排序方法的思想和相应实现算法&#xff1b; 理解和掌握用二叉排序树(BST)实现动态查找的基本思想和相应的实现 算法。 理解和掌握哈希(HASH)存…

【备战秋招】每日一题:2023.04.26-实习-第三题-MC方块

在线评测链接:P1231 题目内容 MC最新版本更新了一种特殊的方块&#xff0c;幽匿催发体。这种方块能够吸收生物死亡掉落的经验并感染周围方块&#xff0c;使其变成幽匿块。Steve想要以此为基础尝试搭建一个经验仓库&#xff0c;他来到了创造超平坦模式&#xff0c;在只有草方块…

[进阶]junit单元测试框架详解

单元测试 就是针对最小的功能单元(方法&#xff09;&#xff0c;编写测试代码对其进行正确性测试。 以前是如何进行单元测试的&#xff1f;有什么问题&#xff1f; 只能在main方法编写测试代码&#xff0c;去调用其他方法进行测试。无法实现自动化测试&#xff0c;一个方法测…

python数字猜谜2.0

改进了一下数字猜谜&#xff1a; 开头&#xff0c;可选等级&#xff1a; import random guess -1 c 0 print("数字猜谜游戏&#xff01;") n input("选择等级 A B C&#xff1a;") if (n "A") or (n "a"):guess random.randint…

模拟电路系列分享-阻容的频率响应

目录 概要 整体架构流程 技术名词解释 技术细节 1.以低通为例 2.高通电路&#xff1a; 总结&#xff1a; 概要 提示&#xff1a;这里可以添加技术概要 接着上一节的内容&#xff0c;这一节我们将介绍阻容的频率响应 整体架构流程 提示&#xff1a;这里可以添加技术整体架构…

模拟电路系列文章-放大电路输出电容

目录 概要 整体架构流程 技术名词解释 技术细节 小结 概要 提示&#xff1a;这里可以添加技术概要 一个运放组成的同相比例器&#xff08;包含运放内部结构&#xff09;所示&#xff0c;在它的输出端对地接了一个大电容C&#xff0c;这是一个极其危险的电路&#xff0c;一般会…

Java注解以及BigInteger类、BigDecimal类

说明&#xff1a; ① java.math包的BigInteger可以表示不可变的任意精度的整数。 ② 要求数字精度比较高&#xff0c;用到java.math.BigDecimal类 15是精度 后面大写的字母是要求要四舍五入 注解的理解 ① jdk 5.0 新增的功能 ② Annotation 其实就是代码里的特殊标记, 这些标…

C语言:使用指针打印数组内容

题目&#xff1a; 写一个函数打印arr数组的内容&#xff0c;不使用数组下标&#xff0c;使用指针。 arr是一维数组。 思路一&#xff1a;用 for循环 进行循环打印&#xff08;未写自定义函数&#xff09; 总体思路&#xff1a; &#xff08;一&#xff09;. 定义一维数组arr&a…

基于Hexo和Butterfly创建个人技术博客,(14) 给博客站点添加Aplayer音乐

Hexo官司网查看 这里 本章目标&#xff1a; 掌握aplayer音乐插件的用法给博客站点添加音乐功能 一、概述 个人比较倾向网站以简洁为主&#xff0c;并不赞成把网站做成花里虎哨的&#xff0c;比如添加鼠标特效或各种动态的元素。但个人站点的随意性比较大&#xff0c;虽没必要做…

【C++】内存管理、new和delete操作类型、operator new和operator delete函数、new和delete的实现原理

文章目录 1.C/C内存管理2.C语言的内存管理方式3.C内存管理方式3.1 new和delete操作内置类型3.2 new和delete操作自定义类型 4.operator new与operator delete函数5.new和delete的实现原理5.1内置类型5.2 自定义类型 1.C/C内存管理 在C/C中&#xff0c;内存管理是程序员负责管理…

2023.6.20-【personal training】:键盘输入整数,求其和与平均数。并对每一次键入都实现自主控制。

代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a 0; int sum 0; double ave 0; double sum2 0; int qua 0; int tri ; printf("请输入一个整数&#xff1a;"); tri scanf_s("%d", &a); while …