2014-11-14 51 views
-1

我想寫一類集羣,其中有雙打的矢量的矢量的程序。當試圖找到質心(平均點)時,我得到一個錯誤。多維向量下標越界

的想法是獲得所述第一座標的值,則第二,第三等中的每一個陣列中的座標,取它們的平均值,並且將它們推入重心對象然後返回它。

的代碼以找到重心低於

vector<double> Cluster::getCentroid() 
{ 

    double temp; 


    for(int i=0; i<cluster[i].size();i++) 
    { 
     temp=0; 

     for(int j=0;j<cluster.size();j++) 
     { 
      temp+=cluster[j][i]; 
     } 
     centroid.push_back(temp/cluster.size()); 
    } 

return centroid; 

} 

其中質心是一個矢量時,羣集類的私有成員。

我得到的錯誤是:

「的表達:下標越界」

我將不勝感激任何反饋,或者什麼可導致此問題的任何建議。

+0

其中重心聲明? –

+1

在該線爲'(INT I = 0; I <簇[I] .size();我++)'您正在訪問與索引'i'簇,而不檢查它的大小。 –

回答

0

您在訪問元素之前,檢查大小,因此它似乎可以反你的循環。
下面可以幫助:

std::vector<double> Cluster::getCentroid() 
{ 
    std::vector<double> centroid; 
    for (int i = 0; i != cluster.size(); i++) 
    { 
     double temp = 0; 

     for (int j=0; j != cluster[i].size(); j++) 
     { 
      temp+=cluster[i][j]; 
     } 
     centroid.push_back(temp/cluster.size()); 
    } 
    return centroid; 
} 

而且你可以通過使用STL簡化它:

std::vector<double> Cluster::getCentroid() 
{ 
    std::vector<double> centroid; 
    for (const auto& c : cluster) { 
     centroid.push_back(std::accumulate(c.begin(), c.end(), 0.0)/cluster.size()); 
    } 
    return centroid; 
} 
+0

@MattMcNabb:修正,謝謝。 (但不確定哪一個是OP想要的真正除數)。 – Jarod42