如何在c ++中使用迭代器的倒数第二个位置

时间:2011-10-30 14:58:50

标签: c++ boost iterator

我有以下代码,可以帮助我将一堆值写成逗号分隔的文件格式。我的问题是,在写入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 <<",";
}

3 个答案:

答案 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)

难道你不能总是删除最后一个字符,因为你知道这将是一个无关的逗号吗?