私は迷路を解くためのC ++プログラムを書いています(実際には迷路を解くラインフォロワー用です)。そのために、グローバル変数を宣言しました。
vector< node > node_container // to contain each node encountered
// with its latest info.
node は maze の実際のノードを示すクラスです。
class node
{
//members..
};
今、関数を使用して迷路を解くために再帰を使用しています。
void node_action(node & current_node)
// will be called with argument node_container[0] for the first time
{
//do some works first...then
if(new_node_found == true)
{
node new_node;
node_container.push_back(new_node);
// i think at this point reference variable current_node becomes invalid
// because the vector is just reallocated . am i correct ?
//here new node becomes current node and node_action() function is called for it now
node_action(node_container[(node_container.size())-1]);
//return to our first node i.e. for which this version of node_action() is called.
// but i think 'current_node' is no more that what i want it to be
}
} // end of node_action()
int main()
{
node first ;
node_container.push_back(first);
node_action(node_container[0]);
}
ここで私の質問は、ベクトル node_container の要素、つまり「current_node」への参照が正しいかどうか (つまり、無効になります)、この問題の回避策は何ですか?
考えられる解決策の 1 つは、引数を参照ではなく値で渡し、ノード オブジェクトが変更されるたびに node_container を更新することです。
しかし、これは本当に厄介な方法であり、ネットできれいにしたい...
私は経験豊富なプログラマーではないので、回答を詳しく教えていただけると助かります。高度なありがとう...