2011-05-11 2 views
5

나는 내가 반복하는 벡터를 가지고있다. 벡터의 마지막 요소는 특별한 경우이며, 별도로 테스트하고 싶습니다. 예를 들어, 나는 같은 일을 할 수BOOST_FOREACH를 사용할 때 벡터의 마지막 요소를 테스트하려면 어떻게해야합니까?

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

나는 매크로 BOOST_FOREACH로 반복자를 교체하고 싶습니다. 마지막 요소에 대한 비슷한 테스트를 수행 할 수 있습니까? 당신은 당신이합니다 (BOOST_FOREACH 루프에서) 일반적으로 작업 할 범위로 벡터를 분할 할 수 있습니다 범위가 BOOST_FOREACH 작품 때문에

+1

왜 마지막이다 하나의 특별한 경우인가요? 더 좋은 방법이있을 수 있습니다. – GManNickG

+1

당신은'BOOST_REVERSE_FOREACH'를 사용하고 첫번째 테스트를 할 수 있습니까? –

답변

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

누구의 당신이 특별히 취급 할 :

#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; 
}