2011-10-30 77 views
1

我有以下一段代碼,它可以幫助我將一堆值寫入逗號分隔的文件格式。我的問題是,我不想在最後一個元素寫入normcsv後留下一個逗號。如何使用beg的那種如果子句中:如何在C++中使用迭代器的倒數第二位

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 <<","; 
} 

回答

4

相反除了最後迭代過程中的元素之後打印逗號的,打印之前的元素除了第一迭代過程中。爲此,您可以使用if(beg != RVBEARline.begin())

{ 
    auto it = x.begin(), end = x.end(); 

    if (it != end) 
    { 
    for (; ;) 
    { 
     process(*it); 

     if (++it == end) break; 

     print_delimiter(); 
    } 
    } 
} 

這裏x.begin()x.end()只被調用一次:

+1

+1,除了我會避免對每個循環迭代都調用'.begin()'和調用'.end()'(在條件中)。 –

+0

你會怎麼做? – Lumpi

+0

@Lumpi:用一個簡單的'bool'變量跟蹤你的狀態,而不是重複比較'.begin()'。 – ildjarn

0

你不能只是隨時刪除最後一個字符,因爲你知道這將是一個外來的逗號?

+0

嗯,在我的片段的倒數第二行中,我發送「複製」到outfile,後面跟着一個逗號(我必須插入io才能獲得csv格式)。這很好,並且除了最後一個「副本」被髮送到文件之外,還需要它。 – Lumpi

2

的替代ruakh的「第一次加休息」的方式,您可以通過使用循環和半結構少了一個局部變量做。每個循環都有一個強制比較,儘可能最小。外面檢查空虛。

+0

+1:好點。我的回答有點。 。 。狹窄。 – ruakh