我有一系列不会改变的分数\位置。我应该表示为int的向量还是新的类型?
我现在的偏好是使用矢量:
doSomething(myVec[0], myVec[1] );
doSomethingElse(myVec[2], myVec[3] );
而不是:
doSomething( myType.getPos1(), myType.getPos2() );
doSomethingElse( myType.getPos3(), myType.getPos4() );
有什么想法或想法吗?
由于
答案 0 :(得分:3)
很难用给定的信息说出来。但是到目前为止提供的任何信息,我更愿意用struct Point
和x
坐标编写y
并创建vector
个点。这将为您提供将对象存储在标准容器中的好处,此外,它将以通用结构逻辑绑定数据,这样您每次需要时都不需要vec[0],vec[1]
。作为旁注,如果您使用getPos
方法编写课程,我当然会写getPos(int index)
而不是getPos1
,getPos2
等。
答案 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