《C++ Primer》 第08章 标准 IO 库 | Good !

本文深入探讨了C++标准库中的输入/输出机制,包括面向对象的iostream、fstream、sstream,以及条件状态管理和输出缓冲区的管理。此外,文章还讲解了文件的输入与输出操作,以及字符串流的应用实例。
第08章:标准IO库
——C++的输入/输出(input/output)由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO)。

第一节:面向对象的标准库
@ 学习摘录062:iostream定义读写控制窗口的类型
——istream 从流中读取
——ostream 写到流中去
——iostream 对流进行读写;从istream和ostream派生而来
@ 学习摘录063:fstream定义读写已命名文件的类型
——ifstream 从文件中读取;由istream派生而来
——ofstream 写入到文件中;由ostream派生而来
——fstream读写文件;由iostream派生而来
@ 学习摘录064:sstream定义的类型用于读写存储在内存中的string对象
——istringstream从string对象中读取;由istream派生而来
——ostringstream写入到string对象中去;由ostream派生而来
——stringstream对string对象进行读写,由iostream派生而来

第二节:条件状态(condition state)
@ 学习摘录065:IO错误例子:
——以下例子,如果在标准输入设备输入Borges。
——则cin在尝试将输入的字符串读为int型数据失败后,会生成一个错误状态。
——如果输入文件结束符(end-of-file)。
——则cin也会进入错误状态。
——而如果输入1024,则成功读取,cin将处于正确的无错误状态。
——流必须处于无错误状态,才能用于输入或输出。
——检测流是否可用的最简单的方法是检查其真值。
if(cin) // ok to use cin, it is in a valid state
while(cin >> word) // ok: read operation successful…
@ 学习摘录066:各种条件状态的定义
——s.bad(),badbit标志着系统级的故障,如无法恢复的读写错误。
——s.fail(),failbit标志着出现可恢复的错误,这种导致设置failbit的问题通常是可以修正的。
——s.eof(),eofbit遇到文件结束符时设置的。
——s.good(),如果bad、fail或者eof中的任意一个为true,则检查流本身将显示该流处于错误状态。如果这三个条件没有一个为true,则good操作将返回true。
——s.clear(),clear操作将条件重设为有效状态。
@ 学习摘录067:流状态的查询和控制
——回顾逗号操作符的求解过程:首先计算它的每一个操作数,然后返回值右边的操作数作为整个操作的结果。
int ival;
// read cin and test only for EOF; loop is executed even if there are other IO failures
while(cin >> ival, !cin.eof() )  // 哦!了解吧!
{
  if (cin.bad())                   // input stream is corrupted; bail out 
      throw runtime_error(“IO stream corrupted”);
  if (cin.fail())                   // bad input
  {
cerr << “bad data, try again”;  // warn the user
cin.clear(istream::failbit);     // reset the stream
continue;                  // get next input
   }
  // ok to process ival
}

第三节:输出缓冲区的管理
@ 学习摘录068:缓冲区的刷新
——下面五种情况将导致缓冲区的内容被刷新,即写入到真实的输出设备或者文件:
——1. 程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。
——2. 在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会写到下一个值之前刷新。
——3. 用操纵符(manipulator)显式地刷新缓冲区,例如行结束符endl.
——4. 在每次输出操作执行完后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区。
——5. 可将输出流与输入流关联(tie)起来。在这种情况下,在读输入流将刷新其关联的输出缓冲区。
@ 学习摘录069:unitbuf操纵符与flush操纵符   Good !
——如果需要刷新所有输出,最好使用unitbuf操纵符。
——unitbuf操纵符在每次执行完写操作后都刷新流:
——cout << unitbuf << “first” << “second” << nounitbuf;
——等价于 cout << “first” << flush << “second” << flush;

第四节:文件的输入与输出
@ 学习摘录070:读取一个存放文件名的容器,打开每个文件
——此例中,如果忽略clear的调用,则循环只能读入第一个文件。 Good !
ifstream input; 
vector<string>::const_iterator it = files. begin();
// for each file in the vector
while( it != files.end() ) 
{
  input.open(it -> c_str());  // open the file
  // if (!input)
     break;             // error: bail out!
while(input >> s)     // do the work on this file
   process(s);
input.close();        // close file when we’re done with it
input.clear();        // reset state to ok
++it;               // increment iterator to get next file
}

第五节:字符串流
@ 学习摘录071:操纵每行中的每个单词的实例
string line, word;              // will hold a line and word from input, respectively
while(getline(cin, line))         // read a line from the input into line
{  // do per-line processing
   istringstream stream(line);   // bind to stream to the line we read
   while(stream >> word)      // read a word from line
   {
     // do per-word processing
   }
}
——使用getline函数从输入读取整行内容。然后为了获得每行中的单词,将一个istringstream对象与所读取的行绑定起来,这样只需使用普通的string输入操作符即可读出每行中的单词。
【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析与p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷作用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员与工程技术人员,尤其适合从事结构设计、力学仿真与多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理与编程实现;③服务于科研复现、论文写作与工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论与优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建与p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值