2

括弧内のコンマ区切りリストとして a内の文字列を使用std::copyして出力したい。そのため、最後の要素の後にある要素を削除するという問題に対処する必要があります。std::ostream_iteratorvector", "

私はこれを試しました

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>

int main() {

    std::vector<std::string> v;
    v.push_back("a");
    v.push_back("b");
    v.push_back("c");

    std::stringstream os;
    os << '(';
    std::copy(v.begin(), v.end(), std::ostream_iterator<std::string>(os, ", "));
    os.seekp(-2, std::ios_base::cur);
    os << ')';

    std::cout << os.str() << ".";

    return 0;
}

出力:

(a, b, c) .
         ^

しかし、私が得る出力には、閉じ括弧の後に余分な空白文字seekpがあります。これは、書き込み位置を移動するだけで、書き込まれた文字を削除しないためです。

その最後の文字を削除したり、EOF を書いたりする方法はありますか?

4

2 に答える 2

8

", "そもそも最後にオマケを書かないのはどうだろう…

if(!v.empty())
{
   std::copy(v.begin(), v.end()-1, std::ostream_iterator<std::string>(os, ", "));
   os << v.back();
}
于 2013-11-06T16:18:00.587 に答える