从向量中正确访问对象的属性并将其清除
Posted
技术标签:
【中文标题】从向量中正确访问对象的属性并将其清除【英文标题】:Accessing an object's attributes correctly out of a vector and clearing it out 【发布时间】:2010-10-16 00:47:04 【问题描述】:我不熟悉 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();
问题:
a) 如何从向量中获取我的三个 x,y 坐标?我想将每个存储到它自己的 int xi,yi 中来渲染它们。
b) 即使我没有为 MyPoint 类定义析构函数,也可以在向量上调用 clear()
吗?
【问题讨论】:
如果您没有,请确保获得a good introductory C++ book;这将有助于为您回答此类问题。 @James:在这方面,你现在听起来像我。 :) 很好,我已经厌倦了成为“买一本书”的人。 :P 我认为在 SO 中提问比阅读一本书要快得多(而且更有教育意义和思路清晰)。 @omgzor:哈,不。如果您在网上获取一些信息,您将永远无法正确学习它。另外,使用初始化列表。 @GMan:呵呵。好吧,既然我们没有巴特沃思先生来让初学者保持一致,我想我们都必须尽我们所能提供帮助:-D 【参考方案1】:一)
trianglePoints[0].x
trianglePoints[0].y
trianglePoints[1].x
trianglePoints[1].y
trianglePoints[2].x
trianglePoints[2].y
b)
是的,该类使用默认析构函数。
【讨论】:
【参考方案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) 可以调用 clear;仅当您有需要清理的资源(如内存、文件句柄等)或您的类是基类(在这种情况下您可能需要虚拟析构函数)时,才需要显式析构函数。
【讨论】:
【参考方案3】:如何从向量中获取我的三个 x,y 坐标?
vector
重载了下标运算符 ([]
),因此可以像访问数组一样访问元素。或者(并且最好),您可以使用迭代器。
即使我没有为 MyPoint 类定义析构函数,也可以在向量上调用
clear()
吗?
是的;编译器提供了一个默认的析构函数。
【讨论】:
以上是关于从向量中正确访问对象的属性并将其清除的主要内容,如果未能解决你的问题,请参考以下文章