当前位置: 首页 > news >正文

c++11 标准模板(STL)(std::ios_base)(三)

定义于头文件 <ios>

class ios_base;

ios_base 是作为所有 I/O 流类的基类工作的多用途类。它维护数种数据:

1) 状态信息:流状态标志;

2) 控制信息:控制输入和输出序列格式化和感染的本地环境的标志;

3) 私有存储:允许 long 和 void* 成员的有下标可扩展数据结构,它可以实现为二个任意长度的数组,或二元素结构体的单个数组,或另一容器;

4) 回调:从 imbue() 、 copyfmt() 和 ~ios_base() 调用的任意数量用户定义函数。

典型实现保有对应下列 fmtflags 、 iostate 、 openmode 及 seekdir 所有值的成员常量,维护当前精度、宽度、格式化标志、异常掩码、缓冲区错误状态、保有回调的可调大小容器、当前感染的 locale 、私有存储的成员变量及 xalloc() 所用的静态整数变量。

本地环境

设置本地环境

std::ios_base::imbue

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

设置流的关联本地环境为给定值。在返回前,以 imbue_event 为参数调用 register_callback() 所注册的每个函数。

参数

loc-要关联到流的新 locale

返回值

操作前与流关联的 locale 对象。

返回当前本地环境

std::ios_base::getloc

std::locale getloc() const;

返回当前与流关联的 locale 。

参数

(无)

返回值

与流关联的 locale 对象。

内部可扩展数组

返回能安全用作 pword() 和 iword() 下标的程序范围内独有的整数

std::ios_base::xalloc

static int xalloc();

返回(程序范围内)唯一的值,它能用于通过调用 iword() 和 pword() 访问 std::ios_base 的私有存储中一个 long 和一个 void* 元素。到 xalloc 的调用不分配内存。

此函数线程安全;从多个线程共时访问不导致数据竞争。 (C++14 起)

等效地自增 std::ios_base 的私有静态数据成员,如同以执行 return index++; ,若 index 是该静态成员的名称(它可以为 std::atomic 或以其他方式以支持多线程共时访问) (C++14 起)。

参数

(无)

返回值

用作 pword/iword 下标的独有整数。

调用示例

#include <array>
#include <tuple>
#include <ctime>
#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <codecvt>
#include <locale>using namespace std;template<class charT, class traits = std::char_traits<charT> >
class mystream : public std::basic_ostream<charT, traits>
{
public:static const int xindex;mystream(std::basic_ostream<charT, traits>& ostr) :std::basic_ostream<charT, traits>(ostr.rdbuf()){this->pword(xindex) = this;}void myfn(){*this << "[special handling for mystream]";}
};// 每个 mystream 特化从 xalloc() 获得独有的下标
template<class charT, class traits>
const int mystream<charT, traits>::xindex = std::ios_base::xalloc();// 此 I/O 操纵符将能用于辨识身为 mystream 的 ostream
// 通过查找存储于 pword 的指针
template<class charT, class traits>
std::basic_ostream<charT, traits>& mymanip(std::basic_ostream<charT, traits>& os)
{if (os.pword(mystream<charT, traits>::xindex) == &os){static_cast<mystream<charT, traits>&>(os).myfn();}return os;
}int main()
{std::cout << "cout, narrow-character test " << mymanip << std::endl;mystream<char> myout(std::cout);myout << "myout, narrow-character test " << mymanip << std::endl;std::wcout << "wcout, wide-character test " << mymanip << std::endl;mystream<wchar_t> mywout(std::wcout);mywout << "mywout, wide-character test " << mymanip << std::endl;return 0;
}

输出

如果有必要的话,调整私有存储的大小,并且访问位于提供的下标的long元素

std::ios_base::iword

long& iword( int index );

首先,充分地分配或重置私有存储( long 的动态数组或另一可索引数据结构)以确保 index 是合法下标,然后返回到带下标 index 的私有存储 long 元素。

引用可能被此 ios_base 对象上任何其他操作非法化,包含另一对 iword() 的调用,但维持返回值,使得以相同下标从 iword(index) 读取将产生相同值(直至下次到 copyfmt() 的调用)。值能用于任何目的。必须通过先前的 xalloc() 调用获得元素下标,否则行为未定义。新元素初始化为 0 。

若分配失败,则调用可能抛出 std::ios_base::failure 的 std::basic_ios<>::setstate(badbit) 。

参数

index-元素的下标值

返回值

到该元素的引用。

异常

设置 badbit 时可能抛出 std::ios_base::failure 。

调用示例

#include <array>
#include <tuple>
#include <ctime>
#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <codecvt>
#include <locale>using namespace std;#include <iostream>
#include <string>struct Foo
{static int foo_xalloc;std::string data;Foo(const std::string& s) : data(s) {}
};// 分配 Foo 对象所用的 iword 存储
int Foo::foo_xalloc = std::ios_base::xalloc();// 若 iword 保有 1 则此用户定义 operator<< 打印字符串
std::ostream& operator<<(std::ostream& os, Foo& f)
{if (os.iword(Foo::foo_xalloc) == 1){return os << std::string(f.data.rbegin(), f.data.rend());}else{return os << f.data;}
}// 此 I/O 操纵符在 0 与 1 间翻转存储于 iword 的数
std::ios_base& rev(std::ios_base& os)
{os.iword(Foo::foo_xalloc) = !os.iword(Foo::foo_xalloc);return os;
}int main()
{Foo f("example");std::cout << f << '\n' << rev << f << '\n' << rev << f << '\n';return 0;
}

输出

 

若需要则重置私有存储的大小,并访问位于指定下标的 void* 元素

std::ios_base::pword

void*& pword( int index );

首先,充分地分配或重置私有存储( void* 的动态数组或另一可索引数据结构)以确保 index 是合法下标,然后返回到带下标 index 的私有存储 void* 元素。

引用可能被此 ios_base 对象上任何其他操作非法化,包含另一对 pword() 的调用,但维持返回值,使得以相同下标从 pword(index) 读取将产生相同值(直至下次到 copyfmt() 的调用)。值能用于任何目的。元素下标必须由 xalloc() 获得,否则行为未定义。初始化新元素为 NULL 。

若分配失败,则调用可能抛出 std::ios_base::failure 的 std::basic_ios<>::setstate(badbit) 。

参数

index-元素的下标值

返回值

到该元素的引用。

异常

设置 badbit 时可能抛出 std::ios_base::failure 。

注意

若存储于 pword 的指针要求管理,则可用 register_callback() 安装按需执行深复制或解分配的处理函数。

调用示例

#include <array>
#include <tuple>
#include <ctime>
#include <string>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <codecvt>
#include <locale>
#include <string>using namespace std;template<class charT, class traits = std::char_traits<charT> >
class mystream : public std::basic_ostream<charT, traits>
{
public:static const int xindex;mystream(std::basic_ostream<charT, traits>& ostr) :std::basic_ostream<charT, traits>(ostr.rdbuf()){this->pword(xindex) = this;}void myfn(){*this << "[special handling for mystream]";}
};// 每个 mystream 特化从 xalloc() 获得独有的下标
template<class charT, class traits>
const int mystream<charT, traits>::xindex = std::ios_base::xalloc();// 此 I/O 操纵符将能用于辨识身为 mystream 的 ostream
// 通过查找存储于 pword 的指针
template<class charT, class traits>
std::basic_ostream<charT, traits>& mymanip(std::basic_ostream<charT, traits>& os)
{if (os.pword(mystream<charT, traits>::xindex) == &os){static_cast<mystream<charT, traits>&>(os).myfn();}return os;
}int main()
{std::cout << "cout, narrow-character test " << mymanip << '\n';mystream<char> myout(std::cout);myout << "myout, narrow-character test " << mymanip << '\n';std::wcout << "wcout, wide-character test " << mymanip << '\n';mystream<wchar_t> mywout(std::wcout);mywout << "mywout, wide-character test " << mymanip << '\n';
}

输出

 

相关文章:

c++11 标准模板(STL)(std::ios_base)(三)

定义于头文件 <ios> class ios_base; 类 ios_base 是作为所有 I/O 流类的基类工作的多用途类。它维护数种数据&#xff1a; 1) 状态信息&#xff1a;流状态标志&#xff1b; 2) 控制信息&#xff1a;控制输入和输出序列格式化和感染的本地环境的标志&#xff1b; 3)…...

在线协同办公小程序开发搭建开发环境

目录 介绍 开发环境说明 虚拟机 原因 VirtualBox虚拟机 VMware虚拟机v15 安装MySQL数据库 安装步骤 导入EMOS系统数据库 安装MongoDB数据库 启动Navicat&#xff0c;选择创建MongoDB连接 创建用户 搭建Redis数据库 配置Maven 安装IDEA插件 Lombok插件 …...

【编译、链接、装载六】汇编——目标文件

【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——objdump三、代码段四、 数据段和只读数据段五、 ELF文件结构描述1、头文件2、段表2.1、重定位表2.2、字符串表2.3、查看重定位表…...

王道计算机考研408计算机组成原理汇总(下)

提示:真正的英雄是明白世界的残酷,也遭受了社会带给他的苦难,他依然能用心的说“我热爱这个世界,我愿竭尽所能去为我的世界而好好战斗 文章目录 前言4.1.1 指令格式4.1.2 扩展操作码指令格式4.2.1 指令寻址4.2.2 数据寻址4.2.3 偏移寻址4.2.4 堆栈寻址汇总前言4.3.1 高级语…...

偏向锁、轻量级锁、重量级锁、自旋锁、自适应自旋锁

1. 偏向锁 偏向锁就是在运行过程中&#xff0c;对象的锁偏向某个线程。即在开启偏向锁机制的情况下&#xff0c;某个线程获得锁&#xff0c;当该线程下次再想要获得锁时&#xff0c;不需要重新申请获得锁&#xff08;即忽略synchronized关键词&#xff09;&#xff0c;直接就可…...

Delta 一个新的 git diff 对比显示工具

目录 介绍git diff 介绍delta介绍 一、安装1.下载 Git2.下载 delta3.解压4.修改配置文件5. 修改主题6.其他配置和说明 二、对比命令1.在项目中 git diff 常用命令2.对比电脑上两个文件3.对比电脑上的两个文件夹 三、在Git 命令行中使用效果四、在idea 的Terminal命令行中使用效…...

C# 二进制序列化和反序列化示例

.NET框架提供了两种种串行化的方式&#xff1a; 1、是使用BinaryFormatter进行串行化&#xff1b; 2、使用XmlSerializer进行串行化。 第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息&#xff0c;而第二种将数据流格式化为XML存储。可以使用[Serializable]属…...

【CSS】文字扫光 | 渐变光

码来 可调整角度与颜色值来改变效果 <p class"gf-gx-color">我是帅哥</p> <style>.gf-gx-color {background: -webkit-linear-gradient(135deg,red,red 25%,red 50%,#fff 55%,red 60%,red 80%,red 95%,red);-webkit-text-fill-color: transparen…...

Overhaul Distillation(ICCV 2019)原理与代码解析

paper&#xff1a;A Comprehensive Overhaul of Feature Distillation official implementation&#xff1a;GitHub - clovaai/overhaul-distillation: Official PyTorch implementation of "A Comprehensive Overhaul of Feature Distillation" (ICCV 2019) 本文的…...

<Linux开发>驱动开发 -之-内核定时器与中断

&#xff1c;Linux开发&#xff1e;驱动开发 -之-内核定时器与中断 交叉编译环境搭建&#xff1a; &#xff1c;Linux开发&#xff1e; linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下&#xff1a; &#xff1c;Linux开发&#xff1e; -之-系统移植 uboot移植过程详…...

希尔贝壳邀您参加2023深圳国际人工智能展览会

2023深圳国际人工智能展览会“AIE”将于2023年5月16-18日在深圳国际会展中心 (宝安)举办&#xff0c;希尔贝壳受邀参加&#xff0c;展位号&#xff1a;A331。 伴随着智能行业的快速发展&#xff0c;展会已被越来越多的企业列入每年必选展会&#xff0c;也成为各采购商选购的理…...

设计优质微信小程序的实用指南!

微信小程序是一种快速发展的应用形式&#xff0c;设计良好的小程序能够提升用户体验并吸引更多的用户。在设计微信小程序时&#xff0c;有一些关键的指南可以帮助我们做出出色的设计。以下是即时设计总结的一些设计指南&#xff0c;希望能对准备设计微信小程序的人有所帮助。 …...

大数据期末总结

文章目录 一、这学期分别学习了Scala、spark、spring、SpringMvc、SpringBoot1、scala2、spark3、spring4、SpringMvc5、SpringBoot 二、总结 一、这学期分别学习了Scala、spark、spring、SpringMvc、SpringBoot 1、scala Scala是一门基于JVM的编程语言&#xff0c;具有强大的…...

selenium面试题总结

今天有同学问到seleinum面试的时候会问到的问题&#xff0c;随便想了想&#xff0c;暂时纪录一下。欢迎大家在评论中提供更多问题。 1.selenium中如何判断元素是否存在&#xff1f; selenium中没有提供原生的方法判断元素是否存在&#xff0c;一般我们可以通过定位元素异常捕获…...

⑧电子产品拆解分析-1拖4USB拓展坞

⑧电子产品拆解分析-1拖4USB拓展坞 一、功能介绍二、电路分析以及器件作用1、内部电路拆解三、参考资料学习一、功能介绍 ①USB2.0一拖四通讯;②具备OTG功能,可适配大部分USB接口设备;二、电路分析以及器件作用 1、内部电路拆解 分析:❤️ ❤️ ❤️ 主控是MA8601 USB 2.0…...

月度精华汇总 | 最新XR行业资讯、场景案例、活动都在这一篇里啦!

​ 在过去的一个月中&#xff0c;平行云为您带来了关于XR领域的一系列精彩文章&#xff0c;涵盖了行业资讯、应用案例&#xff0c;市场互动&#xff0c;帮助您掌握XR领域最新动态&#xff0c;了解实时云渲染、Cloud XR技术的价值&#xff0c;以及平行云实时云渲染解决方案LarkX…...

Redis实战案例1-短信登录

Redis的共享session应用 1. 项目的相关工作 导入sql文件 找到对应的sql文件即可 基本表的信息 基本架构 导入对应的项目文件&#xff0c;启动相关的service服务; 在nginx-1.18.0目录下启动命令行start nginx.exe&#xff1b; 2. 基于session实现登录的流程 这里利用到Javaweb中…...

华为OD机试真题 JavaScript 实现【找终点】【2023 B卷 100分】,附详细解题思路

一、题目描述 给定一个正整数数组&#xff0c;设为nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始&#xff0c;正好走到数组最后一个成员&#xff0c;所使用的最少步骤数。 要求&#xff1a; 第一步必须从第一元素开始&#xff0c;且1 < 第一步的步长 &…...

详解数据仓库数据湖及湖仓一体

比别人更快接收好文章 随着近几年数据湖概念的兴起&#xff0c;业界对于数据仓库和数据湖的对比甚至争论就一直不断。有人说数据湖是下一代大数据平台&#xff0c;各大云厂商也在纷纷的提出自己的数据湖解决方案&#xff0c;一些云数仓产品也增加了和数据湖联动的特性。 但是…...

基于注解切换、Hikari实现的SpringBoot动态数据源(支持JNDI)

实现效果 先说效果&#xff0c;要实现方法级别注解切换当前数据源&#xff0c;不设置注解时走默认数据源&#xff0c;同时支持JNDI源。 总体思路 Spring框架中存在一个抽象类AbstractRoutingDataSource&#xff0c;他是一个可以动态选择当前DataSource的路由类&#xff0c;我…...

从零到一:构建你的第一个智能体应用实战指南

1. 为什么你需要一个智能体应用&#xff1f; 想象一下这样的场景&#xff1a;每天早上你的手机自动整理当天的重要会议和待办事项&#xff0c;根据你的日程推荐最佳出行路线&#xff1b;工作时自动汇总行业动态和关键邮件&#xff1b;晚上回家前提前打开空调并推荐符合你口味的…...

OpenClaw浏览器自动化:ollama-QwQ-32B模拟登录与数据抓取

OpenClaw浏览器自动化&#xff1a;ollama-QwQ-32B模拟登录与数据抓取 1. 为什么选择OpenClaw进行浏览器自动化 去年我在做一个社科研究项目时&#xff0c;需要从十几个政府公开数据平台定期抓取更新的统计报表。最初尝试用Python写爬虫&#xff0c;但遇到几个头疼的问题&…...

HarmonyOS6 ArkTS List 跳转准确

文章目录一、功能概述二、官方核心知识点1. 为什么普通 scrollTo 跳转不准&#xff1f;2. childrenMainSize3. ListScroller.scrollTo三、完整可运行代码四、代码核心逻辑解析1. 声明 ChildrenMainSize2. 配置不规则子项高度3. List 绑定 childrenMainSize4. 执行精准滚动跳转总…...

CCS12.3.0保姆级教程:手把手教你为AWR6843AOP毫米波雷达新建工程(附完整配置参数)

CCS12.3.0零基础实战指南&#xff1a;AWR6843AOP毫米波雷达工程搭建全解析 第一次打开Code Composer Studio 12.3.0时&#xff0c;满屏的选项和参数确实容易让人望而生畏。特别是当你要为TI的AWR6843AOP毫米波雷达创建新工程时&#xff0c;那些关于Cortex R、DSP C67XX、mss/ds…...

学术专著不用愁!AI专著写作工具,为你打造专属学术大作

一、研究者专著写作困境与AI工具的出现 对于很多研究人员来说&#xff0c;写学术专著时面临的最大难题就是“有限的精力”与“无限的需求”之间的矛盾。专著的写作通常需要花费3到5年甚至更久的时间&#xff0c;但研究者们在日常工作中&#xff0c;除了教学和科研项目外&#…...

从学术研究到工业部署,Python张量框架选型决策树(含模型规模×硬件约束×团队能力×合规要求4维评估矩阵)

第一章&#xff1a;从学术研究到工业部署&#xff0c;Python张量框架选型决策树&#xff08;含模型规模硬件约束团队能力合规要求4维评估矩阵&#xff09;在将深度学习模型从论文实验推向生产环境的过程中&#xff0c;张量框架的选择远不止“谁更流行”的简单判断。它是一次多目…...

如何快速实现本地离线语音识别:面向Windows用户的完整解决方案

如何快速实现本地离线语音识别&#xff1a;面向Windows用户的完整解决方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录、视频字幕、语音笔记而烦恼吗&#xff1f;传统的语音识别工具要么需要网络…...

Superpowers 系统学习笔记:AI编程Agent的完整开发方法论

Superpowers 系统学习笔记:AI编程Agent的完整开发方法论 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 项目地址:https://github.com/obra/superpowers Star数:36.6K+(持续增长中) 工具作者:Jesse Vincent (@obra) …...

java毕业设计基于SpringBoot酒店预定系统

前言 Spring Boot酒店预定系统是一种功能丰富、易于维护和扩展的在线预订平台。它通过整合前后端技术&#xff0c;实现了酒店信息的在线展示、预订、支付以及管理等一系列功能&#xff0c;为用户和酒店提供了便捷、高效的预订服务。随着旅游业和酒店业的不断发展&#xff0c;该…...

STEP3-VL-10B轻量级多模态模型:硬件要求与配置建议

STEP3-VL-10B轻量级多模态模型&#xff1a;硬件要求与配置建议 想在自己的电脑或服务器上跑一个能看懂图片、能聊天、还能做推理的AI模型吗&#xff1f;今天要聊的STEP3-VL-10B&#xff0c;就是一个让你用相对亲民的硬件就能玩转的多模态模型。 你可能听说过那些动辄几百亿、…...