从模板迭代器开始的迭代器范围 我试图编写一个C++版本的Python的代码>迭代器。TE/:Boo::这是我的第一次尝试: template<typename R> class tee_iterator : std::iterator<std::forward_iterator_tag, typename boost::range_value<R>::type> { public: typedef typename boost::range_value<R>::type T; typedef std::list<T> tee_queue; typedef std::vector<tee_queue> tee_queue_collection; tee_iterator(const R& r, tee_queue* q, tee_queue_collection* qs) : it_(r.begin()), queue_(q), queues_(qs) {} tee_iterator(const R& r) : it_(r.end()), queue_(NULL), queues_(NULL) {} T& operator*() const { return current_; } tee_iterator& operator++() { if (queue_->empty()) { ++it_; for (auto q : queues_) { q->push_back(*it_); } } current_ = queue_->front(); queue_->pop_front(); return *this; } bool operator==(tee_iterator const& o) const { return it_ == o.it_; } bool operator!=(tee_iterator const& o) const { return !(*this == o); } private: typedef typename boost::range_iterator<const R>::type const_iterator; const_iterator it_; tee_queue* queue_; tee_queue_collection* queues_; T current_; }; template<typename R> using tee_range = boost::iterator_range<tee_iterator<R> >; template<typename R> std::list<tee_range<R> > tee(const R& r, int n) { typedef typename boost::range_value<R>::type T; typedef std::list<T> tee_queue; typedef std::vector<tee_queue> tee_queue_collection; tee_queue_collection queues(n); std::list<tee_range<R> > ranges; for (int i = 0; i < n; ++i) { tee_range<R> t = { tee_iterator<R>(r, &queues[i], &queues), tee_iterator<R>(r) }; ranges.push_back(t); } return ranges; } 模板 类tee_迭代器:std::迭代器 { 公众: typedef typename boost::range_value::type T; typedef标准::列表T_队列; typedef std::向量tee_队列_集合; tee_迭代器(常量R&R、tee_队列*q、tee_队列\u集合*qs): 它(r.begin()),队列(q),队列(qs){} tee_迭代器(const R&R):it_u(R.end()),queue_u(NULL),queues_u(NULL){} T&运算符*()常量{返回当前值} tee_迭代器和运算符++() { 如果(队列->空()){ ++它!; 用于(自动q:队列){ q->推回(*it); } } 当前\队列\前端(); 队列->弹出式前端(); 归还*这个; } 布尔运算符==(tee\u迭代器const&o)const{返回它\u==o.it_;} 布尔运算符!=(tee_迭代器const&o)const{return!(*this==o);} 私人: typedef typename boost::range_迭代器::type const_迭代器; 常量迭代器it; T_队列*队列u; T_队列u集合*队列u; T电流; }; 模板 使用tee\u range=boost::iterator\u range; 模板 标准::列表三通(常数R&R,整数n) { typedef typename boost::range_value::type T; typedef标准::列表T_队列; typedef std::向量tee_队列_集合; T_队列_收集队列(n); std::列表范围; 对于(int i=0;i

从模板迭代器开始的迭代器范围 我试图编写一个C++版本的Python的代码>迭代器。TE/:Boo::这是我的第一次尝试: template<typename R> class tee_iterator : std::iterator<std::forward_iterator_tag, typename boost::range_value<R>::type> { public: typedef typename boost::range_value<R>::type T; typedef std::list<T> tee_queue; typedef std::vector<tee_queue> tee_queue_collection; tee_iterator(const R& r, tee_queue* q, tee_queue_collection* qs) : it_(r.begin()), queue_(q), queues_(qs) {} tee_iterator(const R& r) : it_(r.end()), queue_(NULL), queues_(NULL) {} T& operator*() const { return current_; } tee_iterator& operator++() { if (queue_->empty()) { ++it_; for (auto q : queues_) { q->push_back(*it_); } } current_ = queue_->front(); queue_->pop_front(); return *this; } bool operator==(tee_iterator const& o) const { return it_ == o.it_; } bool operator!=(tee_iterator const& o) const { return !(*this == o); } private: typedef typename boost::range_iterator<const R>::type const_iterator; const_iterator it_; tee_queue* queue_; tee_queue_collection* queues_; T current_; }; template<typename R> using tee_range = boost::iterator_range<tee_iterator<R> >; template<typename R> std::list<tee_range<R> > tee(const R& r, int n) { typedef typename boost::range_value<R>::type T; typedef std::list<T> tee_queue; typedef std::vector<tee_queue> tee_queue_collection; tee_queue_collection queues(n); std::list<tee_range<R> > ranges; for (int i = 0; i < n; ++i) { tee_range<R> t = { tee_iterator<R>(r, &queues[i], &queues), tee_iterator<R>(r) }; ranges.push_back(t); } return ranges; } 模板 类tee_迭代器:std::迭代器 { 公众: typedef typename boost::range_value::type T; typedef标准::列表T_队列; typedef std::向量tee_队列_集合; tee_迭代器(常量R&R、tee_队列*q、tee_队列\u集合*qs): 它(r.begin()),队列(q),队列(qs){} tee_迭代器(const R&R):it_u(R.end()),queue_u(NULL),queues_u(NULL){} T&运算符*()常量{返回当前值} tee_迭代器和运算符++() { 如果(队列->空()){ ++它!; 用于(自动q:队列){ q->推回(*it); } } 当前\队列\前端(); 队列->弹出式前端(); 归还*这个; } 布尔运算符==(tee\u迭代器const&o)const{返回它\u==o.it_;} 布尔运算符!=(tee_迭代器const&o)const{return!(*this==o);} 私人: typedef typename boost::range_迭代器::type const_迭代器; 常量迭代器it; T_队列*队列u; T_队列u集合*队列u; T电流; }; 模板 使用tee\u range=boost::iterator\u range; 模板 标准::列表三通(常数R&R,整数n) { typedef typename boost::range_value::type T; typedef标准::列表T_队列; typedef std::向量tee_队列_集合; T_队列_收集队列(n); std::列表范围; 对于(int i=0;i,c++,boost,boost-range,C++,Boost,Boost Range,但一旦我尝试使用它: int main(int argc, char* argv[]) { std::list<int> l; for (int i = 0; i < 10; ++i) { l.push_back(i); } auto t = tee(l, 3); } intmain(intargc,char*argv[]) { std::列表l; 对于(int i=0;i

但一旦我尝试使用它:

int main(int argc, char* argv[])
{
    std::list<int> l;
    for (int i = 0; i < 10; ++i) {
        l.push_back(i);
    }
    auto t = tee(l, 3);
}
intmain(intargc,char*argv[])
{
std::列表l;
对于(int i=0;i<10;++i){
l、 推回(i);
}
自动t=三通(l,3);
}

它打在我脸上,抱怨
boost::detail::iterator\u traits
(以及其他)中缺少
value\u类型。我错过了什么?
tee\u iterator
std::iterator
的孩子还不够吗?

你忘了添加
public

class tee_iterator : public std::iterator...

你确定这不是因为你忘了在
类迭代器之前添加
public
。\u iterator:public std::iterator…
?哦,真丢脸:)-我从
结构中得到了一个生成器,当我把它变成
类时,忘了添加
public
。想回答这个问题吗?:)