我有一個diagonal
類作爲原則對角線。爲了儘量減少空間我存儲{begin: point, size: int}
,而不是存儲point
小號重載operator->迭代器,其中底層容器不存儲真實對象
列表現在,我的算法將很容易實現。如果我可以讓對角線迭代。所以我寫了一個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
不可複製。
爲什麼不在迭代器本身存儲一個點? –