У меня есть PolygonList и тип Polygon, которые являются std :: списками точек или списками списков точек.Проблема с указателями и ссылками в C++
class Point {
public:
int x, y;
Point(int x1, int y1)
{
x = x1;
y = y1;
}
};
typedef std::list<Point> Polygon;
typedef std::list<Polygon> PolygonList;
// List of all our polygons
PolygonList polygonList;
Однако я смущен ссылкой на переменные и указатели.
Например, я хотел бы иметь возможность ссылаться на первый многоугольник в моем polygonList и нажимать на него новую точку.
Таким образом, я попытался установить переднюю часть polygonList к Многоугольник называется currentPolygon так:
Polygon currentPolygon = polygonList.front();
currentPolygon.push_front(somePoint);
и теперь, я могу добавить точки currentPolygon, но эти изменения в конечном итоге не отражается в том же многоугольник в polygonList. Является ли currentPolygon просто копией многоугольника в передней части polygonList? Когда я позже перебираю polygonList, все точки, которые я добавил в currentPolygon, не отображаются.
Это работает, если я это сделать:
polygonList.front().push_front(somePoint);
Почему не эти же и как я могу создать ссылку на физический передней многоугольник, а не его копию?
Так что, когда я объявляю это, мне нужно только «&», но не каждый раз после того, как я его использую? – KingNestor
& is является частью типа: «Polygon &». Таким образом, вам нужно только время объявления. –
Большинство стилей C++ пытаются присоединить модификаторы типа к типу: то есть «Polygon & current», даже если фактический синтаксис является типом, за которым следует измененное имя (следовательно, [] после имени и линейный шум для указателей функций) –