Я держу несколько двумерных точек с координатами xy в списке.У меня есть метод, который сортирует массив по расстоянию между точками с курсором, и метод возвращает указатель на точку, ближайшую к курсору.
Однако я использую & points.first () иэто всегда указывает на первый элемент списка.Однако указатель меняется после того, как я прибегаю к списку.Как получить указатель, который указывает на конкретный элемент, а не на первый элемент списка.
Я пробовал: & points.first ()
QList<Point2> points;
Point2 *DrawingWidget::closestToCursor(){
// Current mouse position
Point2 pos(m_x, m_y);
// There are no points
if(points.isEmpty()){
return NULL;
}
// Sorts according to distance to the cursor
std::sort(std::begin(points), std::end(points), [&pos](Point2 a, Point2 b) {
return pos.distanceFrom(a) < pos.distanceFrom(b);
});
// We dont allow points closer than 50px appart
if(pos.distanceFrom(points.first()) > 50){
return NULL;
}
// Even after the resort, this always points to the first element of the vector. How do I get this elements pointer instead?
// Currently it seems that the pointer is basically LIST+0x0, however if the element shifts to whatever position, how do I still have its pointer?
return &points.first();
}
Каждый раз, когда я звонюэтот метод рядом с новой точкой, указатель просто перемещается к первому элементу списка, и это то, что он должен делать, я знаю это.Но как мне сделать это так, как мне нужно?