简体   繁体   English

自定义迭代器范围函数无效输出

[英]Custom iterator range function invalid output

I want to implement range function to traverse container我想实现range函数来遍历容器

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

I expected我期望

1 2 3 4 1 2 3 4

But received但是收到了

1103219 1109239 3 4 1103219 1109239 3 4

What is the error?错误是什么?

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

Instead of Head taking vector v by value, it should take a reference.而不是 Head 取向量 v 的值,它应该取一个引用。 This fixes your problem.这可以解决您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM