私はdiagonal
主な対角線として機能するクラスを持っています。の{begin: point, size: int}
リストを保存する代わりに、保存しているスペースを最小限に抑えるためにpoint
対角線を反復可能にすることができれば、私のアルゴリズムは簡単に実装できます。だから私は1つ書いた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
コピー不可です。