イレテータ | spin on the RITZ

イレテータ

イテレータです。イレテータじゃありません。イ テ レ ー タ です。

もう面倒だから反復子でいいんじゃないの?

いやダメです。イ テ レ ー タ です。



C++のcoutとかcinとかのストリームってのは何だか微妙だなぁ~

なんて思っていたのですが、ちょっと考えが変わったかも

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

using namespace std;

int main()
{
    string from, to;
    cin >> from >> to;

    //入力ストリームのオープン
    ifstream is(from.c_str());
    //入力イテレータの生成
    istream_iterator<string> ii(is);
    //引数なしのコンストラクタを呼ぶとend-of-streamイテレータが生成される
    istream_iterator<string> eos;

    //ファイルの先頭からEOFまでstringで読み込む
    vector<string> b(ii, eos);
    //bの全体をソート
    sort(b.begin(), b.end());

    //出力ストリームのオープン
    ofstream os(to.c_str());
    //出力イテレータの作成
    ostream_iterator<string> oo(os, "\n");
    //重複なしで出力する
    unique_copy(b.begin(), b.end(), oo);
    
    return !is.eof() && !os;
}


ファイルfromから単語を読み出して、アルファベット順にソートした後、単語の重複をしないようにファイルtoへ出力するプログラム(プログラミング言語C++第3版より)


なんか、おぞましいことになってるね


イテレータ(反復子)ってのがどうなってるのかはコンテナとかによるんだけど、見た目的には同じ様に扱える。

やるじゃん、イテレータ。



でも、たった十行程度を理解するのにだいぶ時間かかったorz




便利なモノが凄く多いのはとてもいいのですが、俺なんかじゃ使いこなせないよね~

う~ん、試しに何かC++で作ってみようかなぁ