使用std::copy以及ostream_iterator快速对数组操作
2016-07-12 15:45
549 查看
以往对一个array进行输出时,往往使用for循环,虽然什么不好的地方,简单明了,但是代码中冗余行数太多。
先来一个输出array的例子
够简单吧,有些时候输出的时候需要输出十六进制,并且字节对齐什么的,如hex, std::setw, set::setfill之类的格式,如下代码可以解决
一个现实的例子是从socket里面接收的报文进行源码输出来
先来一个输出array的例子
int buf[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; copy(buf, buf+10, ostream_iterator<int>(cout, " "));
够简单吧,有些时候输出的时候需要输出十六进制,并且字节对齐什么的,如hex, std::setw, set::setfill之类的格式,如下代码可以解决
template <typename T, int W> struct FixedWidthVal{ FixedWidthVal(T v_) : v(v_) {} T v; }; template <typename T, int W> std::ostream& operator<< (std::ostream& ostr, const FixedWidthVal<T,W> &fwv) { return ostr << hex << std::setw(W) << std::setfill('0') << fwv.v; } copy(buf, buf+recv_cnt, ostream_iterator<FixedWidthVal<int, 2> >(cout, " "));
一个现实的例子是从socket里面接收的报文进行源码输出来
stringstream note_ss;//存放到stringstream中,这样不论是输出终端还是输出文件都很容易解决 note_ss << "RECV "; // 模拟从socket中接收数据 int buf[] = { 0x68,0x14,0x02,0x00,0x00,0x00,0x67,0x01,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x12,0x34,0x0C,0x13,0x01, 0x07,0x10}; copy(buf, buf+sizeof(buf)/sizeof(int), ostream_iterator<FixedWidthVal<int, 2> >(note_ss, " ")); cout << note_ss.str();//输出终端,有了stringstream写入文件也是很easy的事情这样也可以在原始报文中加入0x等前缀等,需要修改对<<的重载
相关文章推荐
- CentOs7 安装Tengine 并设置成系统服务,开机自动启动。
- perf学习-linux自带性能分析工具
- linux上安装部署activemq
- tomcat目录结构
- eclipse4.4 +mavne3.3.9 + tomcat7.0
- aop:config在shiro权限注解中发挥的作用
- Linux下编译软件时指定安装目录
- hadoop——压缩和本地库
- Linux磁盘管理
- linux 下git服务器
- error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj)
- 基于 flask 框架的模拟instagram 图片分享网站的开发 6
- 一天一条Linux指令-mv
- 关于makefile的编写
- Centos7更改默认启动模式
- 架构设计:系统间通信(39)——Apache Camel快速入门(下2)
- property和constructor-arg的使用
- Linux下安装、配置、启动Apache
- 不忘历史、维护中国海权
- nginx 的日志记录 response 的报文头