私のコーディングの関連する(私が思う)行は以下のとおりです。つまり、クラスターのリストがあるということです。そのうちの 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();
};