
C++ (pointry)
Zdravím,
Už zase jsem se zamotal do pointrů v c++. Potřeboval bych poradit, jak by šel udělat vektor, který obsahuje nějaké uzly. Potom vytáhnu ukazatel na uzel ve vektoru a přiřadím jej jiném objektu.
Příklad:
vector<Node> vNode = vector<Node>(0);
Game game = Game(s,&Coord(r-1,p-1));
Node n = Node(game);
vNode.push_back(n);
addGames(vNode[0].getGame().dalsiTah(),&vNode,&vNo de[0]);
...
int addGames(vector<vector<Game> > game, vector<Node>* tr,Node* parent)
{
tr->push_back(Node(game[i][j],parent));
return 0;
}
objekt Node by si potom měl držet v privátní proměnné ukazatel na parent. Avšak tomu tak není :(. Když jsem metodu addgames volal
addGames(vNode[0].getGame().dalsiTah(),&vNode,&n); // už ne přes vector, ale přímo ukazatel na Node (poslední parametr)
tak vše fungovalo podle očekávání. Vzhledem k tomu, že Nodeů mám velké množství, navíc se generují při běhu, tak nemůžu problém obejít podle 2. postupu. Potřebuji to udělat nějak přes ten vector nebo tomu podobně.
Díky za radu
Petr
Myslim ze &vNode a &vNode[0] je to same. Nie som si zhlavy isty nechce sa mi studovat STL (studuj ty alebo pouzi debugger).
Ale kedze vobec nechapem jakeho parenta tam chces dat (co to je u teba parent?) tak ti nenapisem co ine tam dat.
parent je název promenne. Jedná se o stromovou strukturu a potřebuji se zpětně z node dostat k rootu. Naopak je mi to k ničemu, tak jsem si řekl, že každý node bude držet referenci na parent. jinak rozdíl mezi &vNode a &vNode[0] je v tom, že &vNode je vector<Node> a &vNode[0] je Node na pozici 0. Podobně jako u pole.
Este preistotu ta upozornim aj na jednu vec neviem ci vies:
lokalne (deklarovane vnutri funkcie a ne static) premenne su len v zasobniku a po skonceni funkcie prestavaju byt platne, ak si niekam ulozis ukazatel na takuto premennu tak po skonceni funkcie bude ukazovat na nezmysel (nahodne tam moze byt este nejaky cas spravna vec ale potom zrasu raz sa prepise niecim inym). To je dost blba chyba ptz ti to compiler ani linker neindikuje, takze aj na to pozor (to si sa snazil robit v tom druhom spososobe a to bolo tiez tak trochu zle aj ked ti to fungovalo v jednoduchom teste ale nebude to fungovat v komplikovanom programe).
Idealne je vyhybat sa ukazatelom kde to len ide. Napr. ten kontajner "vector" uz ti poskytuje uplne vsetko na to aby si vobec nepouzival ukazatele :)
Este posledne info :) To co chces asi nakoniec dosiahnut sa vola datova struktura strom (tree) http://en.wikipedia.org/wiki/Tree_%28data_structur e%29 skus googlit mozno najdes uz aj nejake lepsie napady na implementaciu. A metody na prechadznie stromu atd. Ale neni to zlozite pride na to clovek aj sam ze jak prechadzet strom a jak ho implemetovat.