用于表示点\位置的类型或向量

时间:2010-06-04 12:19:31

标签: c++ oop stl

我有一系列不会改变的分数\位置。我应该表示为int的向量还是新的类型?

我现在的偏好是使用矢量:

doSomething(myVec[0], myVec[1] );
doSomethingElse(myVec[2], myVec[3] );

而不是:

doSomething( myType.getPos1(), myType.getPos2() );
doSomethingElse( myType.getPos3(), myType.getPos4() );

有什么想法或想法吗?

由于

5 个答案:

答案 0 :(得分:3)

很难用给定的信息说出来。但是到目前为止提供的任何信息,我更愿意用struct Pointx坐标编写y并创建vector个点。这将为您提供将对象存储在标准容器中的好处,此外,它将以通用结构逻辑绑定数据,这样您每次需要时都不需要vec[0],vec[1]。作为旁注,如果您使用getPos方法编写课程,我当然会写getPos(int index)而不是getPos1getPos2等。

答案 1 :(得分:3)

为什么不创建一个实际的矢量结构/类?

向量我指的是数学向量。通常,矢量用于点和位置。这样做的一个好处是您的代码将更具可读性。

这就是游戏,图形和其他应用程序的功能。使用相关数据的列表不是OO,也是OOP存在的原因之一。

答案 2 :(得分:3)

恕我直言最佳解决方案将是:

struct Point {
  int x, y;
};

[......其他地方...]

vector<Point> points();

(我的C ++生锈了,语法可能不正确)

答案 3 :(得分:2)

由于您使用的是stl,我会使用vector< pair<int,int> >(如果这些点不是整数,则使用vector< pair<double,double> >)。它非常适合点。

那么你可以这样做:

vector< pair<int,int> > points;
points.push_back(make_pair(1,2));
points.push_back(make_pair(2,2));

答案 4 :(得分:1)

如果你需要迭代它们,那么答案是显而易见的。

如果他们没有改变,你可以管理复杂性,那么第一个选项就可以了。第二个可能更具可读性(如果你选择好名字)。

您还可以编写一个包含或保存对向量的引用的类。在这种情况下,您可以获得两者的好处。

您也可以使用Boost.tuple库。

#include <boost/tuple/tuple.hpp>

boost::tuple<int,int,int,int> position;

并将其视为:

position.get<N>(); // where N is in 1,2,3,4