私のコーディングの関連する(私が思う)行は以下のとおりです。つまり、クラスターのリストがあるということです。そのうちの 1 つ は、base
別のもの ( ) を吸収しaborbed
ます。aborbed
クラスタは から消去する必要がありますlist
。
私が遭遇した最初の問題は、サイクルが終了した後、base
とabsorbed
クラスターの両方で他の操作を実行する必要があることでした。while
私の検索から、私は= &(*li)
ものを見つけました。私が理解しているのは、要素がli
指す アドレスへのポインターを取得することabsorbed = li
です. これについての説明をいただければ幸いです。
c->getPoints();
さて、より大きな問題は、メソッドの行でセメンテーション違反が発生するjoinCluster()
ことです。何が間違っていますか? 私は何をすべきですか?
Linux x86_64 で g++ (GCC) 4.5.2 を使用しています。
Cluster * base;
Cluster * absorbed;
list<Cluster>::iterator li = clusters.begin();
while ( li != clusters.end() ) {
if (li->getId() == p2) {
absorbed = &(*li);
li = clusters.erase(li);
} else if (li->getId() == p1) {
base = &(*li);
}
++li;
}
base->joinCluster(absorbed);
void Cluster::joinCluster(Cluster * c)
{
set<unsigned int> pts = c->getPoints();
}
set<unsigned int> Cluster::getPoints()
{
return points;
}
class Cluster {
private:
std::set<unsigned int> points;
public:
std::set<unsigned int> getPoints();
};