2011-02-08 76 views
6

所以我已經進入新的C++使用GCC 4.6,現在有基於範圍的for循環。我發現這對迭代數組和向量非常好。C++ 0x方式替換爲(int i ;;)範圍循環與基於範圍的for循環

對於是否有使用這個東西來代替標準

for(int i = min; i < max; i++) {}

for(int& i : std::range(min, max)) {}

一種方法,我想主要是審美的原因有什麼是原生內置到新的C++標準,允許我這樣做?還是我必須編寫自己的範圍/迭代器類?

+0

Duplicate:http://stackoverflow.com/questions/1977339/c-range-xrange-equivalent-in-stl-or-boost – AFoglia 2011-02-08 06:27:51

+0

可能的重複[是否有一個範圍類在C + + 11中使用範圍基於循環?](http://stackoverflow.com/questions/7185437/is-there-a-range-class-in-c11-for-use-with-range-based-for-loops) – 2012-01-02 22:05:07

回答

4

我沒有看到它在任何地方。但它會很平凡:

class range_iterator : public std::input_iterator<int, int> { 
    int x; 
public: 
    range_iterator() {} 
    range_iterator(int x) : x(x) {} 
    range_iterator &operator++() { ++x; return *this; } 
    bool operator==(const range_iterator &r) const { return x == r.x; } 
    int operator*() const { return x; } 
}; 
std::pair<range_iterator, range_iterator> range(int a, int b) { 
    return std::make_pair(range_iterator(a), range_iterator(b)); 
} 

應該做的伎倆(關閉我的頭頂;可能需要一點調整)。一對迭代器應該已經是範圍,所以我相信你不需要自己定義開始和結束。