C++ ostream_iterator简单使用

news/2025/1/16 1:45:10/

ostream_iterator介绍

ostream_iterator是C++标准库中的一个迭代器类,用于将某个容器(如vector、list等)中的元素逐个输出到ostream(如cout)。
ostream_iterator的定义如下:

ostream_iterator<T, charT, traits>

其中,T是要输出的数据类型,charT是输出流的字符类型(如char或wchar_t),traits是字符类型相关的特性。
使用ostream_iterator时,需要包含头文件,并使用相应的构造函数创建一个ostream_iterator对象,将其绑定到要输出的ostream和要输出的数据。
下面是一个简单的示例代码,演示如何使用ostream_iterator将一个vector中的元素输出到cout:

#include <iostream>  
#include <vector>  
#include <iterator>  int main() {  std::vector<int> nums = {1, 2, 3, 4, 5};  std::ostream_iterator<int> output(std::cout, " "); // 创建一个ostream_iterator对象,绑定到cout,元素之间用空格分隔  std::copy(nums.begin(), nums.end(), output); // 将nums中的元素逐个输出到cout  std::cout << std::endl; // 换行  return 0;  
}

上述代码中,首先创建了一个包含5个整数的vector,然后创建了一个ostream_iterator对象,将其绑定到cout,并指定每个元素之间用空格分隔。接着使用std::copy算法将vector中的元素逐个复制到ostream_iterator中,最终输出到cout。
除了可以将元素输出到cout,还可以将元素输出到其他ostream,只需将创建的ostream_iterator对象绑定到相应的ostream即可。

ostream_iterator简单使用

  • 输出字符串
    std::vector<std::string> svec = {"hello world", "Are You OK", "ostream_iterator", "e you ok"};std::copy(svec.begin(), svec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
  • 输出整型
    std::vector<int> ivec = {1, 10, 100, 200, 10};std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, ","));std::cout << std::endl;
  • 反向输出
    std::copy(ivec.rbegin(), ivec.rend(), std::ostream_iterator<int>(std::cout, ","));std::cout << std::endl;
  • 既然是输出流迭代器,那就能输出到任何ostream,输出到文件
    std::ofstream ofs;ofs.open("abc.txt", std::ios::app);std::ostream_iterator<std::string> siter(ofs, "\n");std::copy(svec.begin(), svec.end(), siter);ofs.close();
  • string也是队列,那么也可以输出
    std::string str = "this world is wonderful!";std::copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout, ","));std::cout << std::endl;

完整测试代码

#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>int main(int argc, char* argv[])
{std::vector<std::string> svec = {"hello world", "Are You OK", "ostream_iterator", "e you ok"};std::copy(svec.begin(), svec.end(), std::ostream_iterator<std::string>(std::cout, "\n"));std::vector<int> ivec = {1, 10, 100, 200, 10};std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, ","));std::cout << std::endl;std::copy(ivec.rbegin(), ivec.rend(), std::ostream_iterator<int>(std::cout, ","));std::cout << std::endl;std::ofstream ofs;ofs.open("abc.txt", std::ios::app);std::ostream_iterator<std::string> siter(ofs, "\n");std::copy(svec.begin(), svec.end(), siter);ofs.close();std::string str = "this world is wonderful!";std::copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout, ","));std::cout << std::endl;return 0;
}

http://www.ppmy.cn/news/1054975.html

相关文章

Android OkHttp 源码浅析二

OkHttp 配置参数: get:JvmName("dispatcher") val dispatcher: Dispatcher builder.dispatcherget:JvmName("connectionPool") val connectionPool: ConnectionPool builder.connectionPool/*** Returns an immutable list of interceptors that observe…

OpenGL —— 2.5、绘制第一个三角形(附源码,glfw+glad)(更新:纹理贴图)

源码效果 C++源码 纹理图片 需下载stb_image.h这个解码图片的库,该库只有一个头文件。 具体代码: vertexShader.glsl #version 330 corelayout(location = 0) in vec3 aPos; layout(location = 1) in vec3 aColor; layout(location = 2) in vec2 aUV;out vec4 outColor; ou…

Python 自定义装饰器与上下文管理

1、定义装饰器实现计算函数运行时间 # 自定义装饰器 def compute_time(func):def compute(*args, **kwargs):st time.time()result func(*args, **kwargs)et time.time()print(消费时间 %.6f s % (et - st))return resultreturn compute# 使用 compute_time def work(work_i…

中国缝纫线行业调研与投资方向报告(2023版)

内容简介&#xff1a; 缝纫线按原材料主要分为天然纤维线及合成纤维线两大类。天然纤维线由棉花、羊毛或蚕丝制成&#xff0c;其中棉线最常用&#xff0c;也更适合于缝制内衣等精细织物。合成织维线的原材料可为涤纶、尼龙&#xff08;锦纶&#xff09;等&#xff0c;其中涤纶…

PIL.Image和base64,格式互转

将PIL.Image转base64 ##PIL转base64 import base64 from io import BytesIOdef pil_base64(image):img_buffer BytesIO()image.save(img_buffer, formatJPEG)byte_data img_buffer.getvalue()base64_str base64.b64encode(byte_data)return base64_str将base64转PIL.Image …

Wireshark流量分析例题

目录 前言 一、题目一(1.pcap) 二、题目二(2.pcap) 三、题目三(3.pcap) 四、题目四(4.pcap) 前言 Wireshark流量包分析对于安全来说是很重要的&#xff0c;我们可以通过Wireshark来诊断网络问题&#xff0c;检测网络攻击、监控网络流量以及捕获恶意软件等等 接下来我们…

科技政策 | 四川省科学技术厅关于发布2024年第一批省级科技计划项目申报指南的通知

原创 | 文 BFT机器人 近日&#xff0c;四川省科学技术厅发布了2024年第一批省级科技计划项目申报指南&#xff1b;其中包括自然科学基金项目、重点研发计划、科技成果转移转化引导计划、科技创新基地&#xff08;平台&#xff09;和人才计划。 01 自然科学基金项目 实施周期 …

多个微信号怎么定时发圈?

多个微信号怎么定时发圈&#xff1f;https://mp.weixin.qq.com/s?__bizMzg2Nzg4NjEzNg&mid2247487136&idx2&sn036e1d5f9d3790b12a103a90de474957&chksmceb5fbf7f9c272e1f8e9acf644ad3d4d97fb8fdce77ec5e2a2976527d4d180ad1c277b4336c8&token495803628&…