Я пишу трехмерную сетку для своего научного программного обеспечения, и мне нужно перебирать узлы сетки, чтобы получить их координаты. Вместо того, чтобы держать каждый объект узла в контейнере, я бы предпочел просто вычислять координаты на лету во время итерации. Проблема в том, что 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;
}
Любые данные по этому поводу?
Заранее благодарим, Илья