从输出流中删除输入

Ant*_*rez 1 c++ iostream vector ostream

我想使用std::copystd::ostream_iterator打印出vector括号内的逗号分隔列表中的字符串.所以我必须处理删除", "最后一个元素之后的问题.

我试过这个:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

(a, b, c) .
         ^
Run Code Online (Sandbox Code Playgroud)

但是我得到的输出在右括号后面有一个额外的空格字符,因为seekp只是移动书写位置但不删除书写字符.

有没有办法删除最后一个字符或写一个EOF?

Dav*_*vid 6

如何不在最后写出额外", "的东西......

if(!v.empty())
{
   std::copy(v.begin(), v.end()-1, std::ostream_iterator<std::string>(os, ", "));
   os << v.back();
}
Run Code Online (Sandbox Code Playgroud)

  • @AntonioPérez:将`v.end() - 1`替换为`std :: prev(v.end())`,将`v.back()`替换为`*std :: prev(v.end()) `,它适用于套装. (2认同)