C ++ 0x способ заменить циклы диапазона (int i ;;) на основанный на диапазоне цикл for - PullRequest
6 голосов
/ 08 февраля 2011

Итак, я попал в новый C ++ с использованием GCC 4.6, который теперь имеет циклы for на основе диапазона. Я нашел это действительно хорошим для перебора массивов и векторов.

В основном по эстетическим соображениям я задавался вопросом, есть ли способ использовать это для замены стандарта

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

с чем-то вроде

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

Есть ли что-то изначально встроенное в новый стандарт C ++, который позволяет мне это делать? Или я должен написать свой собственный класс range / iterator?

1 Ответ

4 голосов
/ 08 февраля 2011

Я нигде этого не вижу. Но это было бы довольно тривиально:

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

должен сделать трюк (от макушки головы; может потребоваться небольшая настройка). Пара итераторов уже должна иметь диапазон, поэтому я считаю, что вам не нужно определять начало и конец самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...