参考《C++ Primer Plus》P788

iostream族支持 程序 与 终端 之间的I/O

fstream族支持 程序 与 文件 之间的I/O

sstream族支持 程序 与 string对象 之间的I/O,也就是说,可以使用cout的ostream方法将格式化信息写入string对象中,并使用istream方法(如getline())来读取string对象中的信息。读取string对象中的格式化信息或将格式化信息写入string对象中被称为内核格式化(incore formatting)。

ostringstream

#include <iostream>
#include <sstream>
#include <string>
int main()
{
using namespace std;
ostringstream outstr;
string hdisk;
cout << "What's the name of your hard disk? ";
getline(cin, hdisk); // cin -> hdisk int cap;
cout << "What's its capacity in GB? ";
cin >> cap; // write formatted information to string stream //(格式化信息 -> string对象)
outstr << "The hard disk " << hdisk << " has a capacity of "
<< cap << " gigabytes.\n";
string result = outstr.str();
cout << result; return ;
}
ostringstream类有一个名为str()的成员函数,该函数返回一个被初始化为缓冲区内容的字符串对象。
string result = outstr.str()
使用str()方法可以“冻结”该对象,这样便不能将信息写入该对象中。
istringstream
#include <iostream>
#include <sstream>
#include <string> int main()
{
using namespace std;
string lit = "It was a dark and stormy day, and "
" the full moon glowed brilliantly. ";
istringstream instr(lit); //use buf for input lit -> instr
string word;
while (instr >> word) //read a word a time
cout << word << endl; return ;
}

istringstream类允许使用istream方法族读取istringstream对象中的数据,istringstream对象可以使用string对象进行初始化。

 

应用

CMakeLists.txt

cmake_minimum_required( VERSION 2.8 )
project( stream ) # 添加c++ 11标准支持
set( CMAKE_BUILD_TYPE Release )
set( CMAKE_CXX_FLAGS "-std=c++11" ) # 寻找OpenCV库
find_package( OpenCV REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} ) add_executable( sstream stringstream.cpp )
# 链接OpenCV库
target_link_libraries( sstream ${OpenCV_LIBS} )

stringstream.cpp

#include <iostream>
#include <fstream>
#include <sstream> #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp> using namespace std;
using namespace cv; void readFrame(int index); int main()
{
for (int i = ; i < ; i++)
{
readFrame(i);
}
return ;
} void readFrame(int index)
{
string dir = "./data/";
string rgb = "rgb";
string dep = "depth";
string Ext = ".png"; stringstream ss;
ss << dir << rgb << index << Ext; // ./data/rgb1.png
string filename;
ss >> filename; Mat color = imread( filename );//rgb
imshow(filename,color);
//waitKey(0); ss.clear();
ss << dir << dep << index << Ext; // ./data/depth1.png
filename.clear();
ss >> filename; Mat depth = imread( filename , -);//depth
imshow(filename,depth);
waitKey(); destroyAllWindows(); }

此程序可以将rgb图和对应的深度图按序号依次读出,并显示。

重点是:

ss << dir << rgb << index << Ext;
ss >> filename;

可以将字符串类型(rgb)和整数类型(index)拼起来,index不断更新,可以读取不同下标的文件。
 

内核格式化(C++)的更多相关文章

  1. Linux内核配置编译及基本调试方法

    一.Linux内核配置编译 1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux- 注:也可以直接修改顶层Makefile ARCH ?= arm CROSS ...

  2. C++ Primer Plus 文章17章 进,输出和文件

    文章17章 进.输出和文件 1.当到达输入句子.他将刷新输出缓冲区满输出电流 2.streambuf分类 它提供了用于各种操作的一个缓冲 ios_base类表示流的一般特征 ios基础的类ios_ba ...

  3. cpp(第十七章)

    1.baseic_ostream<charT,traits>& write(const char_type *s,streamsize n),cout.write()第一个参数提供 ...

  4. DC/OS安装

    dc/os: https://dcos.io/ 安装文档-docker:https://docs.mesosphere.com/1.11/installing/oss/custom/system-re ...

  5. C++ Primer Plus (Stephen Prata 著)

    第1章 预备知识 (已看) 第2章 开始学习C++ (已看) 第3章 处理数据 (已看) 第4章 复合类型 (已看) 第5章 循环和关系表达式 (已看) 第6章 分支语句和逻辑运算符 (已看) 第7章 ...

  6. C++_IO与文件5-文件的输入与输出

    大多数计算机程序都使用了文件.文件本身是存储在某种设备上的一系列字节. 通常,操作系统管理文件,跟踪它们的位置.大小.创建时间等. 除非在操作系统级别上编程,否则通常不必担心这些事情. 真正需要的是将 ...

  7. C++ 基础知识回顾(I/O)

    [1] I/O基础 大多数计算机语言的输入输出的实现都是以语言本身为基础的,但是C/C++没有这样做.C语言最初把I/O留给了编译器实现人员.这样做的一个原因是可以提供足够的自由度,使之最适合目标机器 ...

  8. 《C++ Primer Plus》学习笔记11

    <C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...

  9. C++ 词汇表

    C++词汇表 A abort()                       特殊函数 如果一个函数抛出异常,但在通往异常函数的调用链中找不到与之匹配的catch,则该程序通常以此函数调用终止 abs ...

随机推荐

  1. Java jdk 8 新特性

    list 统计(求和.最大.最小.平均) 第一种方式 int suma = listUsers.stream().map(e -> e.getAge()).reduce(Integer::sum ...

  2. Phalcon Framework的MVC结构及启动流程分析

    目前的项目中选择了Phalcon Framework作为未来一段时间的核心框架.技术选型的原因会单开一篇Blog另说,本次优先对Phalcon的MVC架构与启动流程进行分析说明,如有遗漏还望指出. P ...

  3. 原生JS获取url汇总

    在WEB开发中,许多开发者都比较喜欢使用javascript来获取当前url网址,本文就此为大家总结一下比较常用获取URL的javascript实现代码 URL即统一资源定位符 (Uniform Re ...

  4. loadrunner--常用函数列表【转】

    1.        Intweb_reg_save_param("参数名","LB=左边界","RB=右边界",LAST);/注册函数,在参 ...

  5. Spark设计思想浅析

    Spark is no rocket science!——博主 了解分布式计算的朋友,一定知道DAG这样一个概念.其实我接触DAG也是在学习MapReduce时了解到的.(具体可查阅<大数据日知 ...

  6. Fully Update And Upgrade Offline Debian-based Systems

    Let us say, you have a system (Windows or Linux) with high-speed Internet connection at work and a D ...

  7. Jmeter Ant Task如果报告中有错误,在邮件内容里面直接显示出来 系列2

    由于部门有多个项目,将自动化测试框架运用于多个项目时,希望针对每个项目修改的东西越少越好,为此,做如下修改: D:\apache-jmeter-2.7\extras\jmeter-results-de ...

  8. 并发编程(五)LockSupport

    并发编程(五)LockSupport LockSupport 提供 park() 和 unpark() 方法实现阻塞线程和解除线程阻塞,实现的阻塞和解除阻塞是基于"许可(permit)&qu ...

  9. java 打包jar 并后台运行

    编译java: javac main.java 运行: java main.class 生成jar: 第一步:新建 一个MANIFEST.MF 第二步:将如下信息放到该文件中 Manifest-Ver ...

  10. jquery中innerWidth(),outerWidth(),outerWidth(true)和width()的区别

    jquery中innerWidth(),outerWidth(),outerWidth(true)和width()的区别 var a = 元素本身的宽度: width() = a: innerWidt ...