Я использую Eigen3 2-мерный вектор в виде 2D точки для рисования OpenGL:указатель или ссылка на STD :: список Eigen3 вектора
typedef Eigen::Vector2d Vec2D;
Тогда у меня есть std::list
с вектором, и я это повторяется для таким образом:
std::list<Vec2D>::const_iterator it;
for(it=points.begin(); it!=points.end(); ++it) {
Vec2D p = *it;
... // something for draw (p.x(), p.y())
}
, но в этом случае переменная p
содержит копию, верно? Теперь .. Я не хочу, чтобы ненужные копии, поэтому я попытался с указателями:
std::list<Vec2D>::const_iterator it;
for(it=points.begin(); it!=points.end(); ++it) {
Vec2D *p = &((Vec2D)*it);
... // something for draw (p->x(), p->y())
}
я нашел странный синтаксис & * это this answer и она работает, даже если я должен был использовать бросок (дон Не знаю, почему, но он не компилировался иначе).
Но я хотел бы использовать ссылку вместо указателя:
std::list<Vec2D>::const_iterator it;
for(it=points.begin(); it!=points.end(); ++it) {
Vec2D &p = ???
... // something for draw (p->x(), p->y())
}
Но я застрял на какой-то компиляции ошибки, как
invalid initialization of non-const reference of type 'Vec2D&' from a temporary of type 'Vec2D'
или что-то еще, что я не могу понять ..
Вы попробовали 'const Vec2D & p = * it;'? –
OMG. Но вы меняете ссылку? – Immueggpain
нет Я не меняю это Я только читаю x() и y() – nkint