考虑到要迭代的序列或数据结构未知,是否存在将迭代器存储为类成员的最佳实践?我编写了一些代码来说明我想要实现的目标,但代码无法编译。
#include <iterator>
class entity {
std::iterator<std::forward_iterator_tag, double>
&it_begin_, &it_end_;
public:
template <typename iter_type>
entity(iter_type first, iter_type last)
: it_begin_(first)
, it_end_(last) { }
// ... other implementation details
};
// example usage
int main() {
std::vector<double> my_vec {1.0, 2.0, 6.0, 8.0, 2.0};
entity my_entity(std::begin(my_vec), std::end(my_vec));
// do stuff with entity
return 0;
}
编辑:
只是为了添加一些上下文,我正在尝试按照 suggestion 的方式实现一些内容我在 CodeReview 网站上收到了。
编辑2:
我收到了一些有用的答案。请原谅我没有提及这个细节,但我认为从代码中可以清楚地看出:我想指定(作为实现细节的一部分)我想要一个前向迭代器,并且取消引用它会返回一个 double
.
最佳答案
几件事:
std::begin(my_vec)
返回一个迭代器,但实体类在其上存储引用。如果您想以这种方式使用它,请删除引用&
。存储迭代器没有问题,但迭代器始终与容器类型相关,例如
vector::iterator
。或者您可以模板化您的类:
template < class iterator >
class entity
{
iterator _it, _end;
public:
entity(iterator begin, iterator end): _it(begin), _end(end){}
/* ... */
};
int main() {
std::vector<double> my_vec {1.0, 2.0, 6.0, 8.0, 2.0};
entity my_entity(my_vec.begin(), my_vec.end());
// do stuff with entity
return 0;
}
关于c++ - 在 C++ 中将迭代器存储为类成员的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201194/