私はTreeVertexクラスを持っている:リストイテレータない反復処理以上のすべての要素
// TreeVertex.h
#ifndef __TREEVERTEX__
#define __TREEVERTEX__
#include <list>
using namespace std;
class TreeVertex {
public:
TreeVertex(list<int>, TreeVertex* = NULL);
list<int> getItemset();
private:
list<int> Itemset;
TreeVertex * Parent;
TreeVertex * LeftChild;
TreeVertex * RightSibling;
};
#endif // __TREEVERTEX__
// TreeVertex.cpp
#include "TreeVertex.h"
TreeVertex::TreeVertex(list<int> Itemset, TreeVertex* Parent) : Itemset(Itemset), Parent(Parent), LeftChild(NULL),
RightSibling(NULL) { }
list<int>
TreeVertex::getItemset() {
return Itemset;
}
そして、このような主な機能:
#include <iostream>
#include "TreeVertex.h"
using namespace std;
int main (int argc, const char ** const argv)
{
list<int> tmpList1;
tmpList1.push_back(1);
TreeVertex * tmpTreeVert1 = new TreeVertex(tmpList1);
list<int> tmpList2;
tmpList2.push_back(2);
TreeVertex * tmpTreeVert2 = new TreeVertex(tmpList2);
list<int> newVertItemset;
newVertItemset.push_back(tmpTreeVert1->getItemset().front());
newVertItemset.push_back(tmpTreeVert2->getItemset().front());
cout << newVertItemset.front() << " " << newVertItemset.back() << endl;
TreeVertex * newTreeVert = new TreeVertex(newVertItemset);
cout << newTreeVert->getItemset().front() << " " << newTreeVert->getItemset().back() << endl;
for (list<int>::iterator it = newTreeVert->getItemset().begin(); it != newTreeVert->getItemset().end(); ++it) {
cout << (*it) << " ";
}
cout << endl;
cout << newTreeVert->getItemset().size() << endl;
return 0;
}
出力は次のようになります。
最終出力(最初の単一の "2")の隣には、ちょうど他のような "1-2" であるべきです。
イテレータが最初の要素を超えていない理由は何ですか?
ありがとうございました。
使用しないでくださいを'__TREEVERTEX__'をインクルードガードとして使用すると、ダブルアンダースコアで始まる名前は実装に予約されています。より良いヘッダーガードは単純に 'TREEVERTEX_H'でしょう。ヒープ上に 'TreeVertex'オブジェクトを作成するのはなぜですか?ヒープ上に作成する場合は、それらを '削除する 'ことを覚えておく必要があります。 –
ありがとうございます。私はそれをします。この例では正しいと思います。ヒープ上にオブジェクトを作成する必要はありません。実際のコードでは、私はポインタが必要です。 –