Неверный вывод пользовательской функции диапазона итератора - PullRequest
1 голос
/ 31 января 2020

Я хочу реализовать функцию диапазона для перемещения контейнера

template<class IterT>
struct iteratorRange {
    IterT begin_;
    IterT end_;

    IterT begin() {
        return begin_;
    }

    IterT end() {
        return end_;
    }
};

template<class T>
iteratorRange<typename vector<T>::iterator>Head(vector<T> v, size_t step) {
    return {begin(v), next(begin(v), min(step, v.size()))};
}

int main() {
   vector<int> v {1, 2, 3, 4, 5, 6, 7};
   for (int& i : Head(v, 4)) {
       cout << i  << ' '; 
   }
}

Я ожидал

1 2 3 4

Но получил

1103219 1109239 3 4

В чем ошибка?

1 Ответ

2 голосов
/ 01 февраля 2020
template<class T>
iteratorRange<typename vector<T>::iterator>Head(vector<T>& v, size_t step) {
    return {begin(v), next(begin(v), min(step, v.size()))};
}

Вместо того, чтобы Head брал вектор v по значению, он должен брать ссылку. Это исправит вашу проблему.

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