使用iostream Iterator

以前只知道IteratorIterator class。平时编程中用的最多的就是拿他遍历某种容器。

今天遇到一种新的使用方式,记录之。

比如有这样一个任务,从标准输入设备读取一串string元素,将它们存到vector内,并进行排列,最后再将这些字符串写回标准输出设备,一般代码大都会是这样的.(已经注释掉的)

#include<iostream>
#include<iterator>
#include<algorithm>
#include<vector>
#include<string>

using namespace std;
int main(){
    string word;
    /*vector<string>text;
    while (cin>>word){
        text.push_back(word);
    }

    sort(text.begin(), text.end());
    for (int ix = 0; ix < text.size(); ix++)
        cout << text[ix] << ‘ ‘;*/
    istream_iterator<string> is(cin);   //将is绑定至标准输入设备
    istream_iterator<string> eof;  //表示要读取的最后一个元素的下一个位置,对标准输入设备而言,end-of-file即代表last,只要在定义istream_iterator时不为他指定istream对象,它便代表end-of-file。
    vector<string> text;
    copy(is, eof, back_inserter(text));  //back_inserter是Iterator Inserter,所谓的insertionadapter,避免使用容器的赋值符,因为使用=必须事先决定一个容器的大小。
    sort(text.begin(), text.end());
    ostream_iterator<string> os(cout, " ");
    copy(text.begin(), text.end(), os);
    return 0;
}

但是通过iostream iterator可以用上述(没有注释掉的)的方法进行实现。

如果要输入到文件中可以添加如下代码

ifstream in_file("文件名");
ofstream out_file("文件名");
if (!in_file || !out_file){
    cerr << "unable to open the necessary files.\n";
    return -1
}2017-04-21 21:55:35
时间: 2024-10-28 11:29:27

使用iostream Iterator的相关文章

Iterator模式

STL中的集合都有Iterator,Iterator模式的作用是遍历集合中的元素.它的实现原理为把遍历封装到一个类中进行(Iterator类),这样避免了暴露这个聚合对象内部. Iterator模式如下图: 实现: Aggregate.h #ifndef AGGREGATE_H_ #define AGGREGATE_H_ typedef int Object; class Iterator; class Aggregate { public: Aggregate(){} virtual ~Agg

STL适配器(adapters)

定义:将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作.适配器扮演者轴承.转换器的角色. 分类: 1.容器适配器:改变容器接口. STL提供两个容器迭代器:queue和stack.它们都是修饰deque后成为另一种风貌的容器. 2.迭代器适配器:改变迭代器接口. Insert Iterator:将容器绑定到back_insert_iterator.front_insert_iterator.insert_iterator.它们都是一个

stream_iterator、ostream_iterator 使用初探

STL定义了供输入及输出的iostream iterator类,称为 istream_iterator和ostream_iterator,分别支持单一型别的元素的读取和写入. 使用方法: 1.包含头文件: #include <iterator>  using namespace std;       2.像使用其他iterator一样使用istream_iterator和 ostream_iterator.如:  使用一对"连接至标准输入"的iterator用于标示元素范围

第三章 泛型编程风格

第三章 泛型编程风格 Standard Template Library(STL)两种组件构成: 容器(container)(vector.list.set.map...) 操作以上容器的所谓的泛型算法(generic algorithm)(find(), sort(), replace(), merge()...) 序列式容器(sequential container):vector.list 依次维护第一个元素.第二个元算......直到最后一个元素,进行迭代操作(iterate)关联式容器

《STL源码剖析》学习笔记系列之七、八——仿函数和配接器

1. 仿函数 仿函数又名函数对象,具有函数性质的对象,就是传入一些参数,然后对参数进行某些运算,然后返回一个值.为了能够使行为类似函数,需要在类别定义中必须自定义function call 运算子operator(). 仿函数有如下几类:算术类仿函数(plus<T>.minus<T>)关系运算类仿函数(equal_to<T>.less<T>)逻辑运算类仿函数(logical_and<T>.logical_or<T>.logical_n

C++ 接配器(Adapter)总结

近日在看<STL源码解析>,STL里面一大堆泛型编程的确是非常巧妙,不过由于时间有限,我还是只能更加专注于日常使用比较多的一些知识. Adapter是我在最开始使用STL Container的时候就听到的一个词,一直以来没有比较深入的了解,借着这次学习STL源码,在这里总结一下: 首先是Adapter的定义,<Design Patterns>中对于Adapter的定义我觉得真的十分准确:将一个Class的接口转换成另一个Class的接口,使原本因接口不兼容而不能合作的Class可以

SGI-STL简记(十一)-适配器(容器、迭代器、仿函数)

适配器(adapters): 概念上类似于设计模式中的适配,此处STL中的适配器可对组件的组合.灵活运用扮演重要角色. STL中适配器主要有:容器适配器.迭代器适配器.仿函数适配器 容器适配器: queue(先进先出).stack(先进后出).priority_queue(优先队列)适配器,即queue和stack的_Sequence序列模板参数默认类型为deque<T>(双端队列), 当然也可以是其他满足适配器的必要接口的容器也可,故这几个可认为是序列模板容器_Sequence的包装器. 迭

C++迭代器 iterator

1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型.(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型.(2) 使用迭代器读取vector中的每一个元素:vector<int> ivec(10,1);for(vector<int>::iterator iter=ivec.

Headfirst设计模式的C++实现——迭代器(Iterator)改良版

iterator.h 1 #ifndef _ITERATOR_H_ 2 #define _ITERATOR_H_ 3 4 class Iterator { 5 public: 6 virtual bool has_next() = 0; 7 virtual void *next() = 0; 8 }; 9 #endif menu.h 1 #ifndef _MENU_H_ 2 #define _MENU_H_ 3 4 class Menu { 5 public: 6 virtual Iterato