2011-05-11 21 views
5

मेरे पास एक वेक्टर है जिसे मैं फिर से चलाता हूं। वेक्टर का अंतिम तत्व विशेष मामला है, और मैं इसके लिए अलग से परीक्षण करना चाहता हूं। उदाहरण के लिए, मैं इस तरह के रूप में कुछ कर सकते हैं:BOOST_FOREACH का उपयोग करते समय मैं वेक्टर में अंतिम तत्व का परीक्षण कैसे कर सकता हूं?

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

मैं 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

सीमाओं के साथ काम करता है BOOST_FOREACH जब से तुम सीमा आप सामान्य रूप से साथ काम करने (BOOST_FOREACH पाश में) चाहते हैं में अपने वेक्टर विभाजित कर सकते हैं और जिनकी आप विशेष रूप से इलाज करने के लिए करना चाहते हैं:

#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; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे