自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呆瓜的博客

记录工作过程中用到技术

  • 博客(77)
  • 收藏
  • 关注

原创 【STL】iostream 编程:其余单参数输出流操纵符

本文演示了如何自定义带单参数的输出流操纵符,以 money 类为例展示格式化金额输出的实现。核心要点包括:1) 使用静态成员存储格式模板,避免继承流类;2) 通过 _Smanip 模板适配任意参数类型;3) 指出示例存在内存泄漏和未实现完整格式化逻辑的问题;4) 强调 _Smanip 是 MSVC 私有扩展,不具备跨平台兼容性。该方案为非侵入式设计,开发者无需修改标准流类即可扩展格式化功能,但需注意资源管理和编译器兼容性限制。

2026-07-31 18:25:37 45

原创 【STL】iostream 编程:带单个参数(int / long)的输出流操纵符

本文介绍了如何通过<iomanip>中的_Smanip宏创建接收单个int/long参数的输出流操纵符,以自定义fillblank函数为例演示了空格填充功能。关键点包括:回调函数需接收ios_base&和参数,通过dynamic_cast获取输出流指针;_Smanip封装函数指针和参数实现链式调用。需注意此方法属于MSVC非标准实现,仅适用于理解setw等标准操纵符原理,跨平台开发不推荐使用。

2026-07-31 10:19:46 171

原创 【STL】iostream编程:iostreams 约定

本文介绍了C++标准库中iostream系列头文件的规范及用途。该系列主要负责文本编码转换和文件读写,包含<fstream>、<iostream>、<sstream>等10个头文件。其中<iostream>提供基础控制台I/O(cin/cout),<fstream>支持文件读写,<sstream>处理字符串流,<iomanip>提供格式控制。其余头文件如<ios>、<streambuf>多为底层组件,通常仅在高阶开发中使用。文章还提供了速查表,清晰列出各头文件的核心功能和使用场景。

2026-07-30 18:23:42 133

原创 【STL】iostream:输入/输出流

本文介绍了C++中的输入输出流类模板体系。核心内容包括:1)basic_iostream类模板及其常用实例化类型iostream和wiostream,支持双向字符读写;2)继承自basic_iostream的basic_fstream(文件读写流)及其char/wchar_t版本fstream/wfstream;3)basic_stringstream类模板及其常用实例stringstream用于内存字符串处理。

2026-07-30 16:46:50 212

原创 【STL】iostream 编程:为自定义类重载 >> 提取运算符

本文介绍了如何为自定义类重载输入流提取运算符>>。通过Date类示例演示了重载实现方式:定义全局函数,返回istream&以实现链式调用,接收流引用和类引用参数。关键规则包括:必须保持与原生>>相同的空白符分隔特性,函数需返回流引用,且必须定义为非成员函数以符合运算符语法结构。这种重载使自定义类能像内置类型一样使用标准输入语法。

2026-07-30 14:56:52 204

原创 【STL】iostream 编程:输入流成员函数

本文介绍了输入流成员函数的基本用法,包括open、get、getline、read、seekg/tellg和close函数。open函数用于绑定文件流与磁盘文件,支持多种打开模式;get和getline函数用于读取数据,区别在于对终止字符的处理;read函数直接读取原始字节流,适用于二进制文件操作;seekg和tellg函数用于调整和查询文件读取位置;close函数释放文件资源。这些函数为文件输入操作提供了灵活的解决方案,适用于不同场景下的数据读取需求。

2026-07-30 14:13:29 544

原创 【STL】iostream 编程:输入流操纵符

本文介绍了C++输入流操纵符的核心功能,重点讲解了进制操纵符(dec/oct/hex)对数字输入解析的影响:hex模式下可识别多种十六进制格式,遇到非法字符会终止解析并置位failbit。强调进制设置全局生效,需手动恢复十进制;指出setprecision等输出操纵符对输入流无效。通过"124n5"等实例说明遇到非法字符时的截断行为和错误处理机制。

2026-07-24 10:15:21 199

原创 【STL】iostream 编程:检测提取操作产生的错误

本文分析了数据提取操作中的错误处理机制。当输入数值超出变量类型范围(如16位有符号int上限32767)时,输入流的failbit会被置位,导致后续所有提取操作失效。恢复读取需执行两步:1)clear()清除错误标记;2)ignore()清空缓冲区。该机制可防止错误数据被处理,但需人工干预才能恢复正常操作。

2026-07-24 09:50:03 210

原创 【STL】iostream 编程:使用提取运算符

摘要: 本文介绍C++提取运算符>>的使用规则与限制。该运算符默认跳过前置空白字符,遇到后续空白即停止读取,适合处理空格分隔的数据(如"10 20 30"),但无法直接处理含空格的句子或逗号分隔数据(如"10,20,30")。文中提出两种解决方案:1)使用getline读取整行后配合字符串流处理;2)通过继承istream类实现自定义分词逻辑(适合高级场景)。

2026-07-23 11:45:54 212

原创 【STL】iostream 编程:构造输入流对象

本文介绍了两种需手动构造的输入流对象:文件输入流(ifstream)和字符串输入流(istringstream)。文件输入流可通过先构造后open或直接传入文件名创建;字符串输入流需传入初始化好的字符串作为数据源。与内置的cin不同,这两种流需显式实例化:ifstream适合文件读取(分复用流和单文件场景),istringstream可将字符串转为流式数据,替代传统sscanf。

2026-07-20 11:40:19 622

原创 【STL】iostream 编程:输入流

本文概述了三种主要输入流:istream(适用于顺序文本输入,常用预定义对象cin)、ifstream(支持磁盘文件输入,可指定二进制/文本模式)和istringstream(从内存字符串提取数据,类似sscanf_s)。它们继承自ios基类,其中ifstream兼具ios和istream功能。cin作为标准控制台输入流,ifstream处理文件输入,istringstream常用于字符串解析与分割。

2026-07-20 10:25:57 214

原创 【STL】iostream 编程:编写无参数自定义操纵符

本文介绍了如何编写无参数的自定义流操纵符,无需继承或复杂宏定义。通过定义全局函数(如bold)并返回ostream&,利用<<运算符重载机制实现链式调用。核心规则包括固定模板格式、理解函数指针调用原理,并指出操纵符会立即执行但可能受缓冲影响延迟显示。适用于颜色、字体样式等无参数场景的流控制。

2026-07-15 11:20:04 225

原创 【STL】iostream 编程:为自定义类重载 << 运算符

本文介绍了如何为自定义类重载<<运算符以实现直接输出。以Date类为例,通过声明友元函数ostream& operator<<(ostream&, const Date&)访问私有成员,实现类似内置类型的流式输出。函数需返回ostream引用以支持链式调用,参数采用非const流引用和const对象引用确保效率。这种重载使自定义类能无缝集成到C++流系统中,保持代码简洁性和一致性,同时兼容所有流操纵符。关键点包括正确的函数签名设计、友元声明必要性及链式返回机制。

2026-07-15 10:02:13 320

原创 【STL】iostream 编程:二进制输出文件

本文介绍了二进制文件输出的关键规则与作用。在Windows系统中,文本模式会自动将换行符\n转换为\r\n,这会破坏二进制数据的原始结构。

2026-07-09 11:43:40 191

原创 【STL】iostream 编程:缓冲区的作用

文章摘要:本文通过C++示例揭示了输出缓冲区的特性——程序运行时内容可能暂存缓冲区而非立即显示。演示了使用flush强制刷新缓冲区确保实时输出,对比了endl的功能差异(附加换行),并指出cin/cerr等对象通过tie机制自动刷新cout缓冲区的特性。核心说明了缓冲机制通过减少系统调用来提升性能,强调正确控制缓冲区对交互式程序的重要性。

2026-07-08 18:59:43 225

原创 【STL】iostream 编程:文件输出流的成员函数

本文介绍了C++文件输出流(ofstream)的核心成员函数及用法,主要包括: 文件绑定:通过构造函数或open()关联文件,支持ios::out(覆盖)和ios::app(追加)等模式,复用流对象需手动close()。 写入函数: put(ch):无格式单字符输出,忽略填充/对齐; write(buf, len):二进制块写入,适合结构体/数组,需指定字节长度。 随机访问: seekp()调整写入指针位置,tellp()获取当前偏移,需配合ios::binary模式。

2026-07-08 15:23:55 278

原创 【STL】iostream 编程:使用插入运算符并控制格式

本文介绍了C++中插入运算符(<<)的基础用法与高级格式化控制技巧。主要内容包括:1) 插入运算符内置支持所有标准数据类型,自定义类需重载operator<<;2) 通过setw/width设置输出宽度,fill控制填充字符;3) 使用left/right/internal操纵符调整对齐方式;4) 利用setprecision配合fixed/scientific标记精确控制浮点数输出格式,包括有效位数和科学计数法。

2026-07-07 15:13:22 340

原创 【STL】iostream 编程:构造输出流对象

本文介绍了构造输出流对象的两种场景:文件输出流(ofstream)和字符串输出流(ostringstream)。文件输出流支持两种构造方式:先默认构造再open文件,或直接在构造函数传入文件名。字符串输出流通过ostringstream实现,使用str()获取最终字符串。

2026-07-01 10:30:13 171

原创 【STL】iostream 编程:输出流

摘要: 本文系统介绍了C++中的三类输出流:ostream(控制台输出,含cout/cerr/clog)、ofstream(文件写入,支持文本/二进制模式)和ostringstream(内存字符串格式化)。三类流均继承自ios基类,共享格式化功能,但应用场景不同:cout等用于终端输出,ofstream操作文件,ostringstream替代sprintf实现安全字符串拼接。

2026-06-30 11:31:49 171

原创 【STL】iostream 编程:输入/输出替换选项

本文介绍了微软C++编译器提供的5种I/O编程方案:1)C运行时库无缓冲直接I/O,适合底层硬件操作;2)ANSI C标准库流式I/O,自带缓冲区;3)硬件直写I/O,用于工控和串口通信;4)MFC类库,适用于MFC项目;5)C++标准库iostream,支持面向对象和格式化I/O。文章特别指出,在Windows GUI程序中cout/cin存在兼容性问题,而文件流和字符串流不受影响,并建议通过继承流缓冲区实现窗口控件的输出。

2026-06-28 17:54:03 229

原创 【STL】iostream 编程:流的定义

C++通过iostream类库实现输入输出功能,其核心概念是流(stream),将流对象视为智能文件进行数据读写。流的行为由所属类及重载运算符决定。操作系统将各类设备视为扩展文件管理,iostream类库与之交互。标准流类还支持内存读写,其语法与文件I/O一致,便于派生自定义流类开发。

2026-06-28 16:53:44 220

原创 【STL】iostream 编程:字符串和 I/O 格式化

摘要:本文介绍了C++ iostream库中的字符串和I/O格式化方法,重点分析了三种格式化方案:标准iostream(安全但代码冗长)、Boost.Format(简洁但非标准)和C语言printf(高效但不安全)。文章通过十六进制输出示例展示了iostream格式化的持久性特点,并指出每次修改格式都需保存/恢复状态的缺点。最后提到C++20引入的std::format作为现代解决方案,兼具类型安全、简洁语法和高性能优势。

2026-06-26 13:54:38 224

原创 【STL】C++标准库中的函数对象(仿函数)

C++函数对象(仿函数)是重载operator()的类对象,用于替代普通函数。相比普通函数,其优势在于可保存内部状态(通过成员变量)和作为类型直接用于模板参数。标准库如<functional>提供了内置函数对象(如std::less),常用于容器排序(如set的模板参数)和算法条件判断(如remove_if的谓词参数)。创建仿函数只需定义类并实现operator()。优先选择仿函数因其更好的封装性(闭包效果)、状态保存能力及类型安全性,能更高效地配合标准库组件使用。

2026-06-26 11:09:08 372

原创 【STL】分配器

STL分配器概述与自定义实现 摘要 STL分配器是C++标准库中容器管理内存的核心组件。除std::array外,所有标准容器都带有分配器模板参数,默认使用allocator<Type>。C++11引入的最小分配器接口精简了实现要求,通过allocator_traits自动补全缺失成员,特别是优化的construct()函数支持移动语义,显著提升性能。 自定义分配器只需实现5个核心成员:转换拷贝构造函数、相等比较、allocate和deallocate。典型应用场景包括共享内存、内存池和特殊对齐需求等。

2026-06-25 11:08:17 443

原创 【STL】矢量化 MSVC STL 算法

摘要: MSVC STL通过矢量化技术(SIMD指令)优化算法性能,包括自动和手动两种方式。自动矢量化由编译器完成,适用于连续内存容器(如vector、array)和基础数值运算;手动矢量化针对特定算法(如查找、统计类)预置SIMD实现,仅支持整数类型,通过宏_USE_STD_VECTOR_ALGORITHMS控制。浮点类型因精度问题仅有部分算法支持手动优化,由_USE_STD_VECTOR_FLOATING_ALGORITHMS控制。

2026-06-23 10:35:29 604

原创 【STL】算法

本文介绍了C++标准库算法的术语规范与基本要求。主要内容包括:1) 标准区间表示法如[A,B)及其遍历规则;2) 等值判断二元谓词的三项强制要求;3) 排序/堆算法中严格弱序的定义及合法谓词示例;4) 升序序列和大顶堆的具体判定标准;5) 算法头文件<algorithm>和<numeric>的功能划分。特别强调所有比较函数必须满足不修改参数、结果一致性和严格弱序等核心规范。

2026-06-22 11:30:41 1007

原创 【STL】迭代器

本文介绍了C++标准库中的迭代器概念及其使用方法。迭代器是用于遍历容器元素的对象,支持显式(begin()/end())和隐式(范围for循环)两种使用方式。迭代器分为五类:输出、输入、前向、双向和随机访问迭代器,功能由弱到强,强类型可替代弱类型。所有迭代器都支持拷贝赋值且操作不抛异常。

2026-06-18 16:29:08 222

原创 【STL】stdext 命名空间

本文介绍了微软在MSVC中扩展的stdext命名空间,主要用于存放非标准哈希容器hash_map/hash_set。随着C++11推出标准unordered容器,建议新项目优先使用std::unordered_map/unordered_set。

2026-06-17 14:52:13 251

原创 【STL】C++标准库的线程安全

C++标准库线程安全规则概述:1)通用规则包括:只读共享安全、写入需加锁、不同实例互不干扰;2)shared_ptr特殊规则:副本操作线程安全,但托管对象仍需同步;3)标准流对象允许并发写入但内容可能交错,读取视为写入操作需同步。部分组件(如原子类型)提供更强保障。

2026-06-17 14:17:56 178

原创 【STL】_HAS_ITERATOR_DEBUGGING

本文介绍了用于控制调试版本中迭代器调试功能的宏 _HAS_ITERATOR_DEBUGGING,现已被官方弃用,推荐改用 _ITERATOR_DEBUG_LEVEL 宏。

2026-06-16 13:49:57 234

原创 【STL】调试迭代器支持

本文介绍了Visual C++调试迭代器支持功能,用于检测迭代器的非法使用。在调试模式下,运行时库会触发断言并终止程序,帮助开发者发现错误。

2026-06-16 11:12:43 657

原创 【STL】_SECURE_SCL

宏 _SECURE_SCL 用于控制是否启用迭代器检查功能,现已被 _ITERATOR_DEBUG_LEVEL 取代。默认情况下,调试版本开启检查(非法使用迭代器会触发运行时错误),正式版本关闭。建议通过 _ITERATOR_DEBUG_LEVEL 配置(1或2对应开启,0对应关闭),而非直接使用 _SECURE_SCL。

2026-06-15 15:42:31 213

原创 【STL】检查迭代器

检查迭代器功能通过_ITERATOR_DEBUG_LEVEL宏控制,在Debug模式下默认开启边界检查,防止容器越界访问。该功能支持标准迭代器和数组迭代器,越界时触发运行时错误。

2026-06-11 15:10:36 340

原创 【STL】_SCL_SECURE_NO_WARNINGS

本文介绍了在C++中关闭MSVC编译器C4996警告的多种方法。C4996警告提示使用了C++标准库中不安全接口或旧式函数。

2026-06-11 10:37:51 181

原创 【STL】_ITERATOR_DEBUG_LEVEL

本文介绍了MSVC中的_ITERATOR_DEBUG_LEVEL宏,它用于控制迭代器安全检查级别。该宏取代了旧版_SECURE_SCL和_HAS_ITERATOR_DEBUGGING宏,提供三个取值:0(关闭检查)、1(基础安全检查)、2(最强调试检查)。Debug模式默认2,Release模式默认0。使用时需在包含标准库头文件前定义该宏,或通过编译器选项指定。合理设置该宏可以平衡程序安全性和性能,建议新代码统一使用_ITERATOR_DEBUG_LEVEL替代旧宏。

2026-06-10 14:26:46 297

原创 【STL】安全库:C++标准库

本文概述了C++标准库在安全性方面的改进,重点介绍了Microsoft C++标准库中旧函数的安全替代方案。标准库将可能导致缓冲区溢出的不安全函数(如copy)替换为更安全的_s后缀版本(如basic_string::Copy_s)。使用不安全函数或错误使用迭代器会触发C4996警告,可通过定义_SCL_SECURE_NO_WARNINGS宏禁用警告。这些改进增强了代码安全性,减少了潜在缺陷风险。

2026-06-10 10:38:16 261

原创 【STL】C++程序的启动与终止

摘要:C++程序启动时,系统会先初始化静态对象的常量值并执行其构造函数(顺序未定义,但标准I/O流会优先初始化);终止时,静态对象析构函数仍可使用标准I/O流。程序通过main返回或exit退出时,会逆序执行atexit注册的函数,若其中抛出异常将直接触发terminate强制终止。标准流对象包括cin/cout/cerr/clog,在构造/析构阶段均可安全使用。

2026-06-09 18:28:21 220

原创 【STL】C++标准库容器

本文概述了C++标准模板库(STL)中的容器分类及特性。容器分为三大类:序列容器(如vector、list等保持插入顺序)、关联容器(如map、set等自动排序)和容器适配器(如queue、stack等受限接口)。文章对比了各类容器的特点与适用场景,介绍了C++14引入的异构查找等新特性,并说明了容器元素的基本要求和访问方式。最后指出所有容器都支持同类型比较,C++14后可通过安全函数比较不同容器。全文为后续深入学习STL容器提供了基础认知框架。

2026-06-09 15:03:52 688

原创 【STL】C++ 标准库的约定

C++标准库在实现上保留了一定灵活性:允许隐藏基类、额外重载函数、类型别名多样性等,但同时也设定了严格限制,如虚函数真实性、类型唯一性和异常规范。开发者应遵循文档行为,避免对内部实现做过多假设。关键约定包括:不自行声明C库函数、不依赖未文档化的重载或继承关系、不假定类型别名具体实现、注意位掩码类型和异常处理规则等。标准库保证函数签名不被宏覆盖、非类函数无隐藏重载、虚函数属性明确,并限制异常抛出范围。

2026-06-02 14:56:48 187

原创 【STL】使用 C++ 标准库标头

本文介绍了C++标准库(STL)的使用方法,主要包括两种导入方式:传统的头文件包含(#include)和C++20/23引入的模块导入(import)。文章详细说明了使用规则,包括头文件的包含顺序、重复包含、命名空间规范等注意事项。重点指出应显式包含所需头文件,避免依赖间接包含;标准库内容主要定义在std命名空间,宏不受命名空间约束;禁止向std命名空间添加自定义声明。这些规范帮助开发者正确高效地使用标准库,确保代码的可移植性。

2026-06-02 13:33:50 396

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除