gpt4 book ai didi

c++ - 使用作为对 vector 元素的引用的参数调用 c++ 函数

转载 作者:太空狗 更新时间:2023-10-29 21:01:49 28 4
gpt4 key购买 nike

我正在编写一个用于解决迷宫问题的 C++ 程序(实际上是为了解决迷宫问题)。为此,我声明了一个全局变量:

vector< node > node_container  // to contain each node encountered 
// with its latest info.

其中节点是表示迷宫中实际节点的类。

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]);

}

现在我的问题是,如果我对 vector node_container 的元素的引用是正确的,即“current_node”(即它变得无效),那么这个问题的解决方法是什么?

一个可能的解决方案是按值传递参数,而不是按引用传递参数,并在每次修改任何节点对象时更新 node_container。

但这确实是一种凌乱的方式,我想做的干净整洁。

最佳答案

vector 调整大小时,引用可能会变得无效。

与其传入对节点本身的引用,不如将vector 索引传入当前节点更安全。

void node_action(int current_node)      
{
//...
node_action(node_container.size()-1);

}

//...
node_action(0);

然后,要访问当前节点,您可以索引到 vector 中。

关于c++ - 使用作为对 vector 元素的引用的参数调用 c++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17181929/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com