このプログラム、分かりません!!

解決


あっきー  2004-12-08 09:02:32  No: 55537

下のプログラムの解析、ソースの流れを説明していただけませんか?
よろしくおねがいしますm(_ _)m

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

template < typename Sequence >
class less_length : public std::binary_function< Sequence, Sequence, bool >
{
public:
    bool operator()( const Sequence& lhs, const Sequence& rhs ) const
    {
        return lhs.size() < rhs.size();
    }
};

int main()
{
    std::vector< std::string > data;
    for( std::string line; std::getline( std::cin, line ); data.push_back( line.substr( 0, 80 ) ) ){
        ;
    }
    std::stable_sort( data.begin(), data.end(), less_length< std::string >() );
    for( std::vector< std::string >::const_iterator it = data.begin(); it != data.end(); ++it ){
        if( !it->empty() ){
            std::cout << *it << std::endl;
        }
    }
}


RAPT  2004-12-08 10:05:35  No: 55538

何がわかりませんか?
全部、ってのはナシで。


あっきー  2004-12-08 10:37:02  No: 55539

部分部分答えてもらうと逆に分かりにくくなりそうなので、全部お願いできませんか?
あ、template 以下からでいいんで…あまり変わらないですが。。。
お手数ですがよろしくお願いします。


Anonymous Coward  2004-12-08 20:00:11  No: 55540

> for( std::string line; std::getline( std::cin, line ); data.push_back( line.substr( 0, 80 ) ) )
コンソールから1行づつ文字列を読み込んでdataにつむ

>    std::stable_sort( data.begin(), data.end(), less_length< std::string >() );
文字列長でソート

>    for( std::vector< std::string >::const_iterator it = data.begin(); it != data.end(); ++it ){
>        if( !it->empty() ){
>            std::cout << *it << std::endl;
>        }
>    }
コンソールに表示

つか、これぐらいSTLやってらすぐに分かりそうなもんだけど。


Gak  2004-12-08 20:20:53  No: 55541

http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200411/04110056.txt

このスレで続ければ良いのに…


monkey  2004-12-08 21:54:37  No: 55542

'このプログラム'って私が書いたヤツですか^^;

// テンプレート引数に渡された型のオブジェクトに適用されるsize関数が返す値を判定し,
// 左辺 < 右辺のときに true を,そうでないときに false を返す
// 関数オブジェクトを定義
template < typename Sequence >
class less_length : public std::binary_function< Sequence, Sequence, bool >
{
public:
    bool operator()( const Sequence& lhs, const Sequence& rhs ) const
    {
        return lhs.size() < rhs.size();
    }
};

int main()
{
    // string型オブジェクトを要素とするvector型配列オブジェクトdataを定義
    std::vector< std::string > data;

    // 標準入力から1行をstring型オブジェクトlineに読み込み,
    // はじめの80文字までをdataに追加することを
    // 入力が終了するまで繰り返す
    for( std::string line; std::getline( std::cin, line ); data.push_back( line.substr( 0, 80 ) ) ){
        ;
    }

    // dataに格納された要素のはじめから終わりまでを
    // less_lengthで定義した基準に従ってソートする
    std::stable_sort( data.begin(), data.end(), less_length< std::string >() );

    // dataのはじめから終わりまで,空の要素を除いて標準出力先に出力する
    for( std::vector< std::string >::const_iterator it = data.begin(); it != data.end(); ++it ){
        if( !it->empty() ){
            std::cout << *it << std::endl;
        }
    }
}

テンプレート、関数オブジェクトや、標準ライブラリのテンプレート、関数については
参考書等で調べて下さい。


あっきー  2004-12-09 00:40:08  No: 55543

ありがとー(^^)/
ほんと、助かるよ☆
そうです、monkeyさんが書いたものです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加