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

news2025/1/8 5:28:57
定义于头文件 <sstream>
template<

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

> class basic_stringbuf : public std::basic_streambuf<CharT, Traits>

 std::basic_stringbuf 是关联字符序列为内存常驻的任意字符序列的 std::basic_streambuf 。能从 std::basic_string 的实例初始化它,或将它做成该类的实例。

std::basic_stringbuf 的典型实现保有一个 std::basic_string 类型对象,或等价的可伸缩序列容器作为数据成员,并将它同时用作受控制字符序列(为 std::basic_streambuf 的六个指针所指向的数组)和关联字符序列(所有输入操作的字符源和输出操作的目标)。

另外,典型的实现保有一个 std::ios_base::openmode 类型的数据成员,以指示流的状态(只读、只写、读写、尾端写等)。

若 overflow() 使用过分配策略,则可存储另外的高水位指针,以跟踪最后初始化的字符。(C++11 起)

亦提供二个对常用字符类型的特化:

类型定义
stringbufbasic_stringbuf<char>
wstringbufbasic_stringbuf<wchar_t>


公开成员函数

 构造一个 basic_stringbuf 对象

std::basic_stringbuf<CharT,Traits,Allocator>::basic_stringbuf

basic_stringbuf() : basic_stringbuf(std::ios_base::in | std::ios_base::out) { }

(1)

explicit basic_stringbuf( std::ios_base::openmode which =

std::ios_base::in | std::ios_base::out );

(2)(C++11 前)

explicit basic_stringbuf( std::ios_base::openmode which );

(C++11 起)

explicit basic_stringbuf( const std::basic_string<CharT, traits, Allocator>& new_str, 

std::ios_base::openmode which = std::ios_base::in| std::ios_base::out );

(3)

basic_stringbuf( const basic_stringbuf& rhs ) = delete;

(4)(C++11 起)

basic_stringbuf( basic_stringbuf&& rhs );

(5)(C++11 起)

1) 默认构造函数。是否初始化序列指针 (eback()gptr()egptr()pbase()pptr()epptr()) 为空指针是实现定义的。

2) 构造 std::basic_stringbuf 对象:通过调用 std::basic_streambuf 的默认构造函数初始化基类,以空字符串初始化字符序列,并设置模式为 which

3) 通过进行同 1) 中的的操作构造 std::basic_stringbuf 对象,随后如同通过调用 str(new_str) 初始化关联字符序列。

4) 复制构造函数被删除; std::basic_stringbuf可复制构造 (CopyConstructible) 。

5) 通过从另一 std::basic_stringbuf 对象 rhs 移动所有状态,包含关联 string 、打开模式、 locale 和所有其他状态,移动构造 std::basic_stringbuf 对象。移动后,保证 *this 中 std::basic_streambuf 的六个指针异于被移动的 rhs 中的指针,除非它们为空。

参数

new_str-用于初始化缓冲区的 basic_string
rhs-另一 basic_stringbuf
which-指定流打开模式。它是位掩码类型,定义下列常量:
常量解释
app每次写入前寻位到流结尾
binary以二进制模式打开
in为读打开
out为写打开
trunc在打开时舍弃流的内容
ate打开后立即寻位到流结尾

注意

常由 std::basic_stringstream 的构造函数调用。

异于 std::ios_base::in 和 std::ios_base::out 的打开模式支持级别在实现中各异。 C++11 显式指定 str() 中和此构造函数中支持 std::ios_base::ate ,但 std::ios_base::app 、 std::ios_base::trunc 和 std::ios_base::binary 在不同实现上有不同效果。

 调用示例

#include <iostream>
#include <sstream>

int main()
{
    // 默认构造函数( mode = in|out )
    std::basic_stringbuf<char> basic_stringbuf1;
    basic_stringbuf1.sputc('1');
    std::cout << "basic_stringbuf1: " << &basic_stringbuf1 << std::endl;

    // 在尾端模式中的 string 构造函数 (C++11)
    std::basic_stringbuf<char> basic_stringbuf2("test", std::ios_base::in
            | std::ios_base::out
            | std::ios_base::ate);
    basic_stringbuf2.sputc('1');
    std::cout << "basic_stringbuf2: " << &basic_stringbuf2 << std::endl;

    // 后附模式测试(结果在编译器间有别)
    std::basic_stringbuf<char> basic_stringbuf3("test", std::ios_base::in
            | std::ios_base::out
            | std::ios_base::app);
    basic_stringbuf3.sputc('1');
    basic_stringbuf3.pubseekpos(1);
    basic_stringbuf3.sputc('2');
    std::cout << "basic_stringbuf3: " << &basic_stringbuf3 << std::endl;

    //5) 通过从另一 std::basic_basic_stringbuf 对象 rhs 移动所有状态,
    //包含关联 string 、打开模式、 locale 和所有其他状态,
    //移动构造 std::basic_basic_stringbuf 对象。
    std::basic_stringbuf<char> basic_stringbuf4(std::move(basic_stringbuf2));
    std::cout << "basic_stringbuf4: " << &basic_stringbuf4 << std::endl;

    return 0;
}

输出

 

析构函数

析构 basic_stringbuf 对象和其所保有的 string

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

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

相关文章

从零开始学习 Java:简单易懂的入门指南之抽象类接口内部类(十一)

面向对象进阶&#xff08;抽象类&接口&内部类&#xff09; 第一章 抽象类1.1 概述1.1.1 抽象类引入 1.2 abstract使用格式1.2.1 抽象方法1.2.2 抽象类1.2.3 抽象类的使用 1.3 抽象类的特征1.4 抽象类的细节1.5 抽象类存在的意义 第二章 接口2.1 概述2.2 定义格式2.3 接…

排序算法——基数排序(C语言)

基数排序的概念&#xff1a; 什么是基数排序&#xff1f;&#xff1f;&#xff1f;基数排序是一种和快排、归并、希尔等等不一样的排序...它不需要比较和移动就可以完成整型的排序。它是时间复杂度是O&#xff08;K*N&#xff09;&#xff0c;空间复杂度是O&#xff08;KM&…

【C语言】memcpy()函数

目录 一.memcpy()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.const void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memcpy()函数的具体使用 1.使用memcpy()函数完成拷贝整型数组数据 2.使用memcpy()函数拷贝结构体数据 三.模…

善于用兵的人,军队粮草取自敌人

善于用兵的人&#xff0c;军队粮草取自敌人 【安志强趣讲《孙子兵法》第8讲】 【原文】 善用兵者&#xff0c;役不再籍&#xff0c;粮不三载&#xff1b;取用于国&#xff0c;因粮于敌&#xff0c;故军食可足也。 【注释】 役不再籍&#xff1a;役&#xff0c;兵役&#xff1b;…

横向移动-域控提权

横向移动-域控提权 CVE-2021-42287 由于Active Directory没有对域中计算机和服务器账号进行验证&#xff0c;经过身份验证的攻击者利用该漏洞绕过完全限制&#xff0c;可将域中普通用户权限提升为域管理员权限并执行任意代码。 利用条件 前提条件&#xff1a;一个域内普通账…

js jquery写一个画板 实现撤回、清空、换色的功能

画布的canvas画板的大小就是这个画板图片的大小 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><metaname"viewport&qu…

鸿蒙剥离 AOSP 不兼容 Android 热门问题汇总,不吹不黑不吵

上周发了一篇 《鸿蒙终于不套壳了&#xff1f;纯血 HarmonyOS NEXT 即将到来》的相关资讯&#xff0c;没想到大家「讨&#xff08;fa&#xff09;论&#xff08;xie&#xff09;」的热情很高&#xff0c;莫名蹭了一波流量&#xff0c;虽然流量对我来说也没什么用&#xff0c;但…

HOT82-杨辉三角

leetcode原题链接&#xff1a;杨辉三角 题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例…

python什么版本比较稳定,python哪个版本用得最多

这篇文章主要介绍了哪个版本的python最好用&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 想学习Python的人都会有一个困惑&#xff0c;那就是Python目前有两个版本Python2和…

windows下dll文件的创建详细教程

1、前言 dll文件是啥&#xff0c;就不作过多赘述了。现在直接教大家如何创建与使用dll文件。 本文基于windows系统&#xff0c;使用的编译相关工具为visual studio 2019。 2、创建dll 2.1 创建dll工程 首先打开visual studio&#xff0c;然后选择创建新项目&#xff0c;在搜…

11、Nvidia显卡驱动、CUDA、cuDNN、Anaconda及Tensorflow Pytorch版本

Nvidia显卡驱动、CUDA、cuDNN、Anaconda及Tensorflow-GPU版本 一、确定版本关系二、安装过程1.安装显卡驱动2、安装CUDA3、安装cudnn4、安装TensorFlow5、安装pytorch 三、卸载 一、确定版本关系 TensorFlow Pytorch推出cuda和cudnn的版本&#xff0c;cuda版本推出驱动可选版本…

【软件测试】Linux环境下Docker搭建+Docker搭建MySQL服务(详细)

目录&#xff1a;导读 前言 一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Linux之docker搭…

PyTorch深度学习实战(11)——卷积神经网络

PyTorch深度学习实战&#xff08;11&#xff09;——卷积神经网络 0. 前言1. 全连接网络的缺陷2. 卷积神经网络基本组件2.1 卷积2.2 步幅和填充2.3 池化2.3 卷积神经网络完整流程 3. 卷积和池化相比全连接网络的优势4. 使用 PyTorch 构建卷积神经网络4.1 使用 PyTorch 构建 CNN…

python中yield关键字

yield和return 理解一个东西最好的办法就是找一个和它类似的东西&#xff0c;然后再搞清楚它们之间的区别。 yield最类似的东西就是return&#xff0c;因为他们起到了同样的作用&#xff1a;返回值。 看这个return的函数&#xff1a; def have_some_wine():print(先开一瓶酒&a…

【云驻共创】华为云之手把手教你搭建IoT物联网应用充电桩实时监控大屏

文章目录 前言1.什么是充电桩2.什么是IOT3.什么是端、边、云、应用协同4.什么是Astro轻应用 一、玩转lOT动态实时大屏&#xff08;线下实际操作&#xff09;1.Astro轻应用说明1.1 场景说明1.2 资费说明1.3 整体流程 2.操作步骤2.1 开通设备接入服务2.2 创建产品2.3 注册设备2.4…

OpenCV图像处理——几何变换

目录 图像缩放图像平移图像旋转图像的仿射变换透射变换图像金字塔 图像缩放 cv.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)import numpy as np import cv2 as cv import matplotlib.pyplot as pltkidscv.imread(./汪学长的随堂资料/4/图像操作/dog.jpg) plt.im…

微信小游戏中的迷宫算法:解密小游戏背后的智慧

引言 随着科技的发展&#xff0c;微信小游戏成为人们休闲娱乐的新选择。其中一些小游戏不仅仅是简单的娱乐&#xff0c;还融入了复杂的算法&#xff0c;如迷宫算法&#xff0c;为玩家带来了更多的挑战和乐趣。本文将带您深入了解什么是迷宫算法&#xff0c;以及如何在微信小游…

MySQL数据库——概述-MySQL的安装、启动与停止和客户端连接、关系型数据库(RDBMS)、数据模型

目录 概述&#xff08;1/2&#xff09; MySQL安装 MySQL启动与停止 客户端连接 概述&#xff08;2/2&#xff09; 关系型数据库&#xff08;RDBMS&#xff09; 数据模型 概述&#xff08;1/2&#xff09; 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进…

C# 一种求平方根的方法 立方根也可以 极大 极小都可以

不知道研究这些干啥&#xff0c;纯纯的浪费时间。。。 public static double TQSquare(double number){Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX1 0, diff 9999999999, diffTemporary 0;for (int i 0; i < 654321; i){if (random1…

高赞:为什么别选计算机专业?

在知乎看到一个这样的问题&#xff1a;“为什么别选计算机专业&#xff1f;” 这个话题有 800 万人次浏览。以下是一位匿名用户的高赞回答&#xff0c;内容可能比较主观化&#xff0c;仅代表原作者个人观点。如果有不同意见欢迎留言区交流啊&#xff01; 不明白现在鼓吹计算机…