下のプログラムの解析、ソースの流れを説明していただけませんか?
よろしくおねがいします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;
}
}
}
何がわかりませんか?
全部、ってのはナシで。
部分部分答えてもらうと逆に分かりにくくなりそうなので、全部お願いできませんか?
あ、template 以下からでいいんで…あまり変わらないですが。。。
お手数ですがよろしくお願いします。
> 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やってらすぐに分かりそうなもんだけど。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200411/04110056.txt
このスレで続ければ良いのに…
'このプログラム'って私が書いたヤツですか^^;
// テンプレート引数に渡された型のオブジェクトに適用される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;
}
}
}
テンプレート、関数オブジェクトや、標準ライブラリのテンプレート、関数については
参考書等で調べて下さい。
ありがとー(^^)/
ほんと、助かるよ☆
そうです、monkeyさんが書いたものです。
ツイート | ![]() |