Правильный доступ к атрибутам объекта из вектора и его очистка - PullRequest
1 голос
/ 16 октября 2010

Я незнаком с ОО в С ++.

Я помещал экземпляры класса MyPoint в

vector <MyPoint> trianglePoints;

, например:

trianglePoints.push_back(MyPoint(x,y));

Это мое определение MyPoint:

class MyPoint {

public:
    float x; 
    float y;

    MyPoint(float x, float y) //constructor
    {
        this->x=x;
        this->y=y;

    }

}; //end

После добавления трех точек в вектор я вызываю функцию для визуализации треугольника, а затем выполняю:

trianglePoints.clear();

Вопросы:

a)Как мне получить три координаты x, y из вектора?Я хочу сохранить каждый в своем собственном int xi, yi для их рендеринга.

б) Можно ли вызывать clear() для вектора, даже если я не определил деструктор для класса MyPoint?

Ответы [ 3 ]

2 голосов
/ 16 октября 2010

а)

trianglePoints[0].x
trianglePoints[0].y
trianglePoints[1].x
trianglePoints[1].y
trianglePoints[2].x
trianglePoints[2].y

б)

Да, класс использует деструктор по умолчанию.

2 голосов
/ 16 октября 2010

(a) Вы можете получить элементы из вектора, используя синтаксис массива:

for (int i = 0; i < 3; i++)
{
    do_something(trianglePoints[i]);
}

или синтаксис итератора:

for (std::vector<MyPoint>::iterator it = trianglePoints.begin();
     it != trianglePoints.end(); ++it)
{
    do_something(*it);
}

или используя синтаксис алгоритма:

std::for_each(trianglePoints.begin(), trianglePoints.end(); do_something);

Для получения более подробной информации о том, что вы можете сделать с std::vector, см., Например, http://cplusplus.com/reference/stl/vector/.

(b) Все в порядке, чтобы очистить;явные деструкторы необходимы только в том случае, если у вас есть ресурсы для очистки (например, память, файловые дескрипторы и т. д.) или если ваш класс является базовым (в этом случае вам может потребоваться виртуальный деструктор).

1 голос
/ 16 октября 2010

Как мне получить три координаты x, y из вектора?

vector перегружает оператор индекса ([]), поэтому элементы могут быть доступны, как если бынаходятся в массиве.В качестве альтернативы (и предпочтительно) вы можете использовать итераторы.

Можно ли вызвать clear() для вектора, даже если я не определил деструктор для класса MyPoint?*

Да;компилятор предоставляет деструктор по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...