从向量中正确访问对象的属性并将其清除

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() 吗?

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

【讨论】:

以上是关于从向量中正确访问对象的属性并将其清除的主要内容,如果未能解决你的问题,请参考以下文章

如何清除画布属性和事件并将其添加回fabricjs?

我是否正确删除了指向对象的向量?

如何将对象向量从类返回到 main.cpp

C ++跨类访问基对象向量中的派生对象的引用

是否可以在 C++ 中更改向量的开始位置以清除其前 n 个元素?

如何从 C++ 中的“指向对象的指针”向量访问对象