2011-02-08 173 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)); 
} 

应该做的伎俩(关闭我的头顶;可能需要一点调整)。一对迭代器应该已经是范围,所以我相信你不需要自己定义开始和结束。