2011-05-11 22 views
5

Üzerinde yinelemediğim bir vektör var. Vektörün son unsuru özel durumdur ve bunun için ayrı ayrı test etmek isterim. Örneğin, ben gibi bir şey yapabilirsiniz:BOOST_FOREACH kullanırken bir vektördeki son eleman için nasıl test yapabilirim?

for (iterator = vector.begin(); iterator != vector.end(); ++iterator) { 
    if ((iterator + 1) == (vector.end())) { 
     ... 
    } else { 
     ... 
    } 
} 

Ben makro BOOST_FOREACH ile yineleyici değiştirmek istiyoruz. Son eleman için benzer bir test yapılabilir mi? Eğer (BOOST_FOREACH döngüde) normalde çalışmak istediğiniz aralığa vektör ayırabilirsiniz aralıkları ile BOOST_FOREACH eser yana

+1

Neden sonuncusu Bir özel durum? Daha iyi bir yol olabilir. – GManNickG

+1

, "BOOST_REVERSE_FOREACH" öğesini kullanabilir ve ilkini test edebilir misiniz? –

cevap

13
if(!vec.empty()) 
{ 
    BOOST_FOREACH(int e, boost::make_iterator_range(vec.begin(), vec.end()-1)) 
    { 
     // Handle each element but the last 
    } 

    // Handle last element here 
} 
5

ve kimin size özel olarak tedavi etmek istiyorum:

#include <stdio.h> 
#include <vector> 

#include "boost/foreach.hpp" 
#include "boost/range.hpp" 

using namespace std; 

int main() { 
    vector<int> foo; 

    foo.push_back(1); 
    foo.push_back(2); 
    foo.push_back(3); 
    foo.push_back(4); 

    vector<int>::iterator special_item(foo.end() - 1); 
    boost::sub_range< vector<int> > normal_items(foo.begin(), special_item); 

    BOOST_FOREACH(int i, normal_items) { 
     printf("%d ", i); 
    } 

    printf("\nspecial item: %d\n", *special_item); 

    return 0; 
} 
İlgili konular