2015-03-31 52 views
0

我有2個類,一個表示二維空間中的一個點的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]; 
} 

其中我主觀上看到的整潔。顯然,如果這個算法是可重用的,將邊存儲在可遍歷的地方具有可伸縮性的好處,但是這種方法只適用於三角形;除此之外,頂點的順序很重要,並且變得更加複雜。

爲了美學的目的,是否將這樣的變量存儲在一個數組中?

除美學外,還有什麼好處嗎?將類似使用的變量一起存儲在內存網絡中是否有性能提升?

+1

爲什麼您需要存儲它們? – Slava 2015-03-31 15:06:19

+4

我當然不認爲你的「排列」解決方案是整潔。就我個人而言,在這種情況下,我甚至不會使用任何變量,只是執行'返回頂點[0] .distanceTo(頂點[1])+頂點[1]。距離頂點(頂點[2])+ 頂點[2]。 distanceTo(vertices [0])' – wvdz 2015-03-31 15:06:23

+0

嘗試查看生成的程序集。它甚至可能是相同的。 – 2015-03-31 15:13:41

回答

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; 
} 

反正你的代碼應該是可讀的,然後優化如有必要

+0

下一個索引的整數代碼如下:'next =(i + 1)%3;' – user2079303 2015-03-31 15:12:18

+0

@ user2079303好點,謝謝 – Slava 2015-03-31 15:13:03

+0

我認爲這對簡單任務來說變得複雜了。如果它是可擴展的,那麼我會按照這個方法來實現它。我發現它比'popovitsj'的評論更不可讀,而且更長。 – Carcigenicate 2015-03-31 15:14:36

0

在C++中,數組(如果一個元素直接訪問而沒有迭代)和變量具有相同的速度。

0

我想,如果你不需要要存儲變量,那麼你不需要創建三個雙變量或一個大小爲3的double數組(在它們將被刪除的範圍的末尾)。我更願意返回結果而不將解決方案的步驟分配到變量中