ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中。ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sprintf。

派生关系图:

ostringstream
 

ostringstream的构造函数形式:

  1. explicit ostringstream ( openmode which = ios_base::out );
  2. explicit ostringstream ( const string & str, openmode which = ios_base::out );

有时候,我们需要格式化一个字符串,但通常并不知道需要多大的缓冲区。为了保险常常申请大量的缓冲区以防止缓冲区过小造成字符串无法全部存储。这时我们可以考虑使用ostringstream类,该类能够根据内容自动分配内存,并且其对内存的管理也是相当的到位。

  1. #include <sstream>
  2. #include <string>
  3. #include <iostream>
  4. using namespace std;
  5. void main()
  6. {
  7. ostringstream ostr1; // 构造方式1
  8. ostringstream ostr2("abc"); // 构造方式2
  9. /*----------------------------------------------------------------------------
  10. *** 方法str()将缓冲区的内容复制到一个string对象中,并返回
  11. ----------------------------------------------------------------------------*/
  12. ostr1 << "ostr1" << 2012 << endl; // 格式化,此处endl也将格式化进ostr1中
  13. cout << ostr1.str();
  14. /*----------------------------------------------------------------------------
  15. *** 建议:在用put()方法时,先查看当前put pointer的值,防止误写
  16. ----------------------------------------------------------------------------*/
  17. long curPos = ostr2.tellp(); //返回当前插入的索引位置(即put pointer的值),从0开始
  18. cout << "curPos = " << curPos << endl;
  19. ostr2.seekp(2); // 手动设置put pointer的值
  20. ostr2.put('g');     // 在put pointer的位置上写入'g',并将put pointer指向下一个字符位置
  21. cout << ostr2.str() << endl;
  22. /*----------------------------------------------------------------------------
  23. *** 重复使用同一个ostringstream对象时,建议:
  24. *** 1:调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit);
  25. *** 2:调用str("")将缓冲区清零,清除脏数据
  26. ----------------------------------------------------------------------------*/
  27. ostr2.clear();
  28. ostr2.str("");
  29. cout << ostr2.str() << endl;
  30. ostr2.str("_def");
  31. cout << ostr2.str() << endl;
  32. ostr2 << "gggghh";    // 覆盖原有的数据,并自动增加缓冲区
  33. cout << ostr2.str() << endl;
  34. }

详细用法请参考如下网址:http://www.cplusplus.com/reference/sstream/ostringstream/?kw=ostringstream 记得c++标准模板看过,当时觉得没啥用,还真有用

 

std::ostringstream的更多相关文章

  1. std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  2. 【转载】C++中替代sprintf的std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  3. std::ostringstream 转std::string

    http://www.cplusplus.com/reference/sstream/ostringstream/ https://en.cppreference.com/w/cpp/io/basic ...

  4. C++ 通过ostringstream 实现任意类型转string

    #include <iostream> #include <string> using namespace std; int main() { ; double b = 65. ...

  5. c++ istream转换为std::string

    std::istreambuf_iterator<char> eos; std::string s(std::istreambuf_iterator<char>(stream) ...

  6. C++ std::thread

    std::thread Defined in header class thread The class thread represents a single thread of execution. ...

  7. istringstream和ostringstream的实现

    ostringstream是将数据写入string里边的,istringstream是将从string里边读出数据的: #include <sstream> int main() { st ...

  8. 数值类型与std::string的相互转换

    1.使用std::stringstream: //将in_value值转换成out_type类型 template<class out_type, class in_value> out_ ...

  9. stringstream istringstream ostringstream 三者的区别

    stringstream istringstream ostringstream 三者的区别 说明 ostringstream : 用于执行C风格字符串的输出操作. istringstream : 用 ...

随机推荐

  1. C语言错误处理方法、C++异常处理方法(throw, try, catch)简介

    一.C语言错误处理方法 1.返回值(if … else语句判断错误) 2.errno(linux 系统调用) 3.goto语句(函数内局部跳转) 4.setjmp.longjmp(Do not use ...

  2. Bulk Load-HBase数据导入最佳实践

    一.概述 HBase本身提供了非常多种数据导入的方式,通常有两种经常使用方式: 1.使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase 2 ...

  3. Java Socket网络编程Server端详解

    Socket通信:分为客户端和服务端的socket代码. Java SDK提供一些相对简单的Api来完成.对于Java而言.这些Api存在与java.net 这个包里面.因此只要导入这个包就可以开始网 ...

  4. Python sql注入 过滤字符串的非法字符

    #coding:utf8 #在开发过程中,要对前端传过来的数据进行验证,防止sql注入攻击,其中的一个方案就是过滤用户传过来的非法的字符 def sql_filter(sql, max_length= ...

  5. PCI & PCIE Configuration Register Space

    1.PCI-Compatible Configurationbits [1:0] are hard-wired, read-only and must return zeros when read.b ...

  6. Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理

    Android Lollipop 添加了Camera2 API,并将原来的Camera API标记为废弃了.相对原来的Camera API来说.Camera2是又一次定义的相机 API,也重构了相机 ...

  7. HDU 1863 畅通工程 克鲁斯卡尔算法

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. How to clone a brach from github

    git clone address.git -b brach_name destination_floder

  9. C# 静态构造函数使用

    当我们想初始化一些静态变量的时候,就需要用到静态构造函数了.这个静态构造函数属于类,而不属于实例,就是说这个构造函数只会被执行一次,即:在创建第一个实例或引用任何静态成员之前,由.NET自动调用. 现 ...

  10. Android基础总结(十)ContentProvider

    内容提供者(掌握) 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的私有数据 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数 ...