4

私は多くの解決策を試してきました。しかし、これを行う方法がわかりません:

for (current = l.begin();current != l.end();current++)
{
    next = ++current;
     if(next != l.end())
            output << (*current)  << ", ";
     else
            output << (*current);
}

リストを印刷して最後のコンマを削除しようとしています:

{1,3,4,5,}
There --^

お知らせ下さい。

4

3 に答える 3

5

違う方法でやってみたらどうですか...

if(!l.empty())
{
    copy(l.begin(), prev(l.end()), ostream_iterator<T>(output, ", "));
    output << l.back();
}

ループ (ループ) には条件がないstd::copyため、これもより最適です。

于 2013-11-06T12:45:33.340 に答える
0

私はそれを別の方法で行います。コレクションには通常複数の要素があると仮定すると、次のようになります。

        auto start = c.begin();
        auto last = c.end();

        if (start != last)
            output << *start++;

        for (; start != last; ++start)
            output << "," << *start;

これらすべてをテンプレート関数に入れて、再利用可能なコードを取得します。

    //! Join a list of items into a string.
    template <typename Iterator>
    inline
    void
    join (std::ostream & output, Iterator start, Iterator last, std::string const & sep)
    {
        if (start != last)
            output << *start++;

        for (; start != last; ++start)
            output << sep << *start;
    }
于 2013-11-06T13:44:21.433 に答える