【发布时间】:2011-10-05 07:01:36
【问题描述】:
可能的重复:
Don't print space after last number
Printing lists with commas C++
#include <vector>
#include <iostream>
#include <sstream>
#include <boost/foreach.hpp>
using namespace std;
int main()
{
vector<int> VecInts;
VecInts.push_back(1);
VecInts.push_back(2);
VecInts.push_back(3);
VecInts.push_back(4);
VecInts.push_back(5);
stringstream ss;
BOOST_FOREACH(int i, VecInts)
{
ss << i << ",";
}
cout << ss.str();
return 0;
}
打印出来:1,2,3,4,5,
但是我想要:1,2,3,4,5
我怎样才能以优雅的方式实现这一目标?
我发现我对“优雅”的含义有些混淆:例如在我的循环中没有放慢“if-clause”的速度。想象一下向量中有 100.000 个条目!如果这就是您所提供的全部内容,我宁愿在完成循环后删除最后一个逗号。
【问题讨论】:
-
我也一直想知道这一点。
-
@Matthieu 我认为这不是骗子。当使用
BOOST_FOREACH时,没有明显的方法来检测开始或结束(你不能简单地检查index == 0或it == c.begin()或其他东西)。所以我不会把这个当成骗子来关闭。 -
@Johannes:我发现答案与“BOOST_FOREACH”无关。最简单的方法似乎是将替代变量放在一边,不管迭代方法是什么,然后……把问题转过来,检测 first 迭代而不是最后一个迭代。
-
您可以尝试我们的 pretty printer 用于所有容器 :-)
-
@Matt 但这对于
for(int i = ..; i < ...; i++)循环来说是错误的方式,对于for(iterator i = ..循环来说也是错误的方式。两个循环都可以将i与..进行比较,而不是引入替代变量。这个问题的难点在于没有迭代器和索引变量可以使用。投票决定重新开放。这些问题是相关的,但我不认为它们是“完全重复”
标签: c++ string boost stringstream csv