我有2个类,一个代表2D空间中一个点的Point,一个三角形,它包含顶点列表(矢量)中的3个点。
对于作业,我必须编写一个周边函数,它给出了三角形的周长。要做到这一点,我需要从顶点找到3个边长,然后添加它们。我最终得到了:
double Triangle::getPerimeter() {
double s1Length = vertices[0].distanceTo(vertices[1]);
double s2Length = vertices[1].distanceTo(vertices[2]);
double s3Length = vertices[2].distanceTo(vertices[0]);
return s1length + s2length + s3length;
}
对我而言,这看起来很难看,所以我决定尝试将两侧存放在一个阵列中:
double Triangle::getPerimeter() {
double lengths[3] = {
vertices[0].distanceTo(vertices[1]),
vertices[1].distanceTo(vertices[2]),
vertices[2].distanceTo(vertices[0])
}
return lengths[0] + lengths[1] + lengths[2];
}
我主观地认为它更整洁。
显然,如果这个算法是可重用的,那么将边存储在可遍历中具有可扩展性的好处,但是这种方法仅适用于三角形;除此之外,顶点的顺序很重要,而且它变得更加复杂。
为了美观,将数据中的变量存储在数组中是不是一般的做法?
除了美学还有什么好处?将类似使用的变量存储在内存网中是否有任何性能提升?
答案 0 :(得分:2)
我不明白为什么你需要将它们存储在很多变量或数组中:
double Triangle::getPerimeter() {
double perm = 0.0;
for( int i =0; i < 3; ++i ) {
int next = (i + 1) % 3;
perm += vertices[i].distanceTo( vertices[next] );
}
return perm;
}
无论如何,您的代码应该是可读的,然后在必要时进行优化
答案 1 :(得分:0)
在C ++中,数组(如果在没有迭代的情况下直接访问元素)和变量具有相同的速度。
答案 2 :(得分:0)
我认为如果你不需要存储变量,那么你不需要创建三个双变量或一个大小为3的double数组(在范围的末尾它们将被删除)。我更喜欢返回结果而不将解决方案的步骤分配给变量