我有以下代码,可以帮助我将一堆值写成逗号分隔的文件格式。我的问题是,在写入normcsv
的最后一个元素之后我不想要逗号。如何在类型的If子句中使用beg
:
if(beg == penultimate element)
then.... bla bla...
我尝试过的所有内容最终都是迭代器无效
ReadLine.erase(0,17);
int offsets[] = {8,8,8,8,8,8};
boost::offset_separator f(offsets, offsets+6);
boost::tokenizer<boost::offset_separator> RVBEARline(ReadLine,f);
boost::tokenizer<boost::offset_separator>::iterator beg;
for( beg=RVBEARline.begin(); beg!=RVBEARline.end();++beg )
{
copy=*beg;
boost::trim(copy);
if(copy.compare(0,1,".")==0)
{
copy.insert(0,"0");
}
normcsv << copy <<",";
}
答案 0 :(得分:4)
除了在 last 迭代期间之后元素之外打印逗号,而不是在元素之前元素之前打印 迭代。为此,您可以使用if(beg != RVBEARline.begin())
。
答案 1 :(得分:2)
作为ruakh的“第一加上休息”方法的替代方法,您可以通过使用循环半结构来减少一个局部变量:
{
auto it = x.begin(), end = x.end();
if (it != end)
{
for ( ; ; )
{
process(*it);
if (++it == end) break;
print_delimiter();
}
}
}
此处x.begin()
和x.end()
仅被调用一次。每轮循环有一个强制比较,最小可能。空虚的检查在外面悬挂。
答案 2 :(得分:0)
难道你不能总是删除最后一个字符,因为你知道这将是一个无关的逗号吗?