このようなものを整列させるには、最初にすべての文字列をメモリ内、おそらく。内に収集する必要がありますstd::vector<std::string>
。std::max_element
次に、次のような比較関数を使用して、最長のものを見つけるために使用できます
。
struct CompareSize
{
bool operator()( std::string const& lhs, std::string const& rhs ) const
{
return lhs.size() < rhs.size();
}
};
その後、adjustfield
出力ストリームのフォーマットパラメータを設定std::setw
し、文字列を反復処理するときに使用して、それぞれを次のように出力できます。
size_t longest = std::max_element( data.begin(), data.end(), CompareSize() )->size();
std::cout.setf( std::ios_base::left, std::ios_base::adjustfield );
for ( std::vector<std::string>::const_iterator current = data.begin(), end = data.end();
current != end;
++ current ) {
std::cout << std::setw( longest ) << *current
<< " The length is "
<< current->size()
<< std::endl;
(もちろん、実際のコードでは、フラグの初期値を保存し、ループの終了後に復元する必要があります。そうしないと、に変更すると、adjustfield
後続の数値出力に多少驚くべき結果が生じます。)