我有一个diagonal
作为主对角线的类。为了最小化我存储的空间{begin: point, size: int}
而不是存储point
s的列表
现在,如果我可以使对角线可迭代,我的算法将很容易实现。所以我写了一个point_iterator
class point_iterator{
friend class diagonal;
const diagonal& _diagonal;
size_t _position;
public:
typedef point_iterator self_type;
typedef point value_type;
typedef point reference;//< returning value instead of reference
typedef boost::shared_ptr<point> pointer;//< it can never return pointer
typedef std::random_access_iterator_tag iterator_category;
typedef boost::int32_t difference_type;
public:
pointer operator->(){return pointer(new point(_diagonal.at(_position)));}
point operator*(){return _diagonal.at(_position);}
由于point
容器中没有任何存储空间,因此我无法通过迭代器返回引用或指针。所以在所有情况下,我都必须创建一个点(可复制)对象并返回。
所以我的参考 typedef 实际上不是参考。这个可以吗 ?
我无法实现operator->()
哪个返回point
对象,它必须返回一些指针point*
或类似指针。我不能只是返回new point(operator*())
,因为用户需要删除它们。所以我shared_ptr
改用了。这个可以吗 ?
我不能使用unique_ptr
,因为它的 C++11。并且scoped_ptr
不可复制。