Итератор STL: «разыменование» итератора на временный. Возможно ли это?

Я пишу трехмерную сетку для своего научного программного обеспечения, и мне нужно перебирать узлы сетки, чтобы получить их координаты. Вместо того, чтобы держать каждый объект узла в контейнере, я бы предпочел просто вычислять координаты на лету во время итерации. Проблема в том, что stl :: iterator требует возврата ссылки на значение в результате operator * () или указателя на operator -> () .

Некоторые из код ниже:


class spGridIterator {
public:
    typedef forward_iterator_tag iterator_category;
    typedef spVector3D value_type;
    typedef int difference_type;
    typedef spVector3D* pointer;
    typedef spVector3D& reference;

    spGridIterator(spGrid* gr, int index);

    spGridIterator& operator++();
    spGridIterator& operator++(int);

    reference operator*() const;
    pointer operator->() const;

private:
    spGrid* m_grid;
    int m_idx;
};

spGridIterator::reference spGridIterator::operator*() const {
    // return m_grid->GetPoint(m_idx);
}

spGridIterator::pointer spGridIterator::operator->() const {
    // return m_grid->GetPoint(m_idx);
}

Этот метод запрашивает координаты узла по предоставленному индексу


spVector3D spGrid::GetPoint(int idx) const {
    // spVector3D vec = ... calculate the coordinates here ...
    return vec;
}

Любые данные по этому поводу?

Заранее благодарим, Илья

5
задан ezpresso 29 October 2010 в 09:01
поделиться