2010-10-16 91 views
1

我不熟悉C++中的OO。从矢量中正确访问对象的属性并清除它

我一直在推动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(); 

问题:

一)我如何得到我的三个X,Y从向量的坐标?我想把它们存储到它自己的int xi,yi中来渲染它们。

b)即使我没有为MyPoint类定义析构函数,是否可以在矢量上调用clear()

+1

如果您没有,请确保您获得[良好的C++入门书籍](http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list);这将有助于为你回答这类问题。 – 2010-10-16 00:50:45

+0

@詹姆斯:在这方面,你现在听起来和我一样。 :)好,我厌倦了成为那个说“拿到书”的人。 :P – GManNickG 2010-10-16 00:51:42

+1

我认为在SO中提问比通过一本书更快(并且更具教育性和思想澄清性)。 – andandandand 2010-10-16 00:56:55

回答

2

一)

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

B)

是,该类使用默认的析构函数。

1

如何从矢量中得到我的三个x,y坐标?

vector重载下标操作符([]),所以元件可以如同它们是在阵列中被访问。另外(最好),你可以使用迭代器。

即使我没有为MyPoint类定义析构函数,也可以在矢量上调用clear()

是的;编译器提供了一个默认的析构函数。

2

(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)可以打电话清楚;显式析构函数只有在你有资源清理(如内存,文件句柄等)时,或者如果你的类是一个基类(在这种情况下你可能需要一个虚析构函数),才是必要的。