C ++ 0x用基于范围的for循环替换(int i ;;)范围循环的方法

时间:2011-02-08 06:04:15

标签: c++ foreach for-loop c++11

所以我一直在使用GCC 4.6进入新的C ++,它现在有基于范围的for循环。我发现这非常适合迭代数组和向量。

出于主要的美学原因,我想知道是否有办法用它来取代标准

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

类似

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

新的C ++标准中是否有内置的内容允许我这样做?或者我是否必须编写自己的范围/迭代器类?

1 个答案:

答案 0 :(得分: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));
}

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