参考《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. Golang之Socket

    go创建socket很简单 package main import ( "fmt" "net" ) func main() { //服务器监听地址 fmt.Pr ...

  2. PAT 1069 微博转发抽奖(20)(代码+思路+测试点4)

    1069 微博转发抽奖(20 分) 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行 ...

  3. 旅游类APP原型模板分享——爱彼迎

    这是一款专为游客提供全球范围内短租服务的APP,可以让你不论出门在外或在家附近都能开展探索之旅,并且还可以获取世界各地独特房源.当地体验及好去处等相关信息. 这款APP层级清晰简明,此原型模板所用到的 ...

  4. 分组取前N记录

    分组取前N记录   经常看到问题,如何取出每组的前N条记录.方便大家参考于是便把常见的几种解法列出于下. 问题:有表 如下,要求取出各班前两名(允许并列第二)Table1+----+------+-- ...

  5. Sublime Text webstorm等编译器快速编写HTML/CSS代码的技巧

    <!DOCTYPE html> Sublime Text webstorm等编译器快速编写HTML/CSS代码的技巧--summer-rain博客园 xiayuhao 东风夜放花千树. 博 ...

  6. Product of integers

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  7. 判定一个数num是否为x的幂

    那个数所在类型中,x的幂最大值为max 1.则第一条判定:max%num==0: 若x不为任何数的幂,则第一条判定足矣. 若x为某个数的幂,则要加判定条件 2.(num-1)%(x-1)==0 同时满 ...

  8. memmove、memcpy、strcpy、memset的实现

    memmove.memcpy.strcpy.memset 原型为: void *memmove( void* dest, const void* src, size_t count ); char*  ...

  9. Django 必会面试题总结

    1 列举Http请求中常见的请求方式 HTTP请求的方法: HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式   注意: 1)方法名称是 ...

  10. 配置 struts2 时掉进 web.xml 的坑

    这个声明不好用 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quo ...