16

ブースト結合は、次の例に示すように、必要に応じて区切り文字列で区切られた文字列のコンテナーを連結するために使用できます:ブースト::アルゴリズム::結合の良い例

私のSTLスキルは弱いです。数値のコンテナー (float、double、int) に同じ関数を使用する方法があるかどうか疑問に思っています。他のタイプに適応させるには、1 つまたは 2 つのライナーが必要なようです。

stl のコピー機能もあり、良い例がここにあります: How to print out the contents of a vector?

しかし、すべての要素の後に区切り文字列を追加する方法が好きではありません。ブーストのみを使用したいと思います。

4

2 に答える 2

28

確かに、結合して double を文字列に変換し、それらを結合することができboost::algorithm::joinますboost::adaptors::transformed

#include <iostream>
#include <vector>
#include <string>

#include <boost/algorithm/string/join.hpp>
#include <boost/range/adaptor/transformed.hpp>

int main()
{
    using boost::adaptors::transformed;
    using boost::algorithm::join;

    std::vector<double> v{1.1, 2.2, 3.3, 4.4};

    std::cout 
      << join( v | 
               transformed( static_cast<std::string(*)(double)>(std::to_string) ), 
               ", " );
}

出力:

1.100000、2.200000、3.300000、4.400000


醜いキャストを避けるためにラムダを使用することもできます

join(v | transformed([](double d) { return std::to_string(d); }), ", ")
于 2013-06-06T14:23:42.953 に答える