C++ 向量和指针问题
c++ vector and pointers issue
我遇到了结构中的指针在添加到向量时丢失数据的问题。
在路径查找器函数中,我正在创建一个vector<Node>
,对于每个节点,我将Node.parent
设置为节点地址。
使用父节点设置节点后,我将这些节点弹出到另一个vector<Node>
中。
我遇到的问题是节点在将它们移动到新向量后丢失了指向父节点的指针。
本质上,代码如下所示。
struct Node {
int x,y;
Node * parent;
}
vector<Node> queue;
queue.push_back(start)
while (queue.size() > 0) {
Node item = queue.back(); //grab a item from queue last thing put in
queue.pop_back(); //remove that item from the queue
traveled.push_back(item); //add item to list of traveled items.
std::vector<Node> neighbors = getNeighbors(item);
setParent(neighbors, &item);
//check each neighbor
for (std::vector<Node>::iterator iter = neighbors.begin(); iter != neighbors.end(); iter++) {
//check if a walkable Node and its not already traveled
if (validNode(*iter) && !contains(traveled, *iter)) {
queue.push_back(*iter);
}
}
}
一旦我将有效的邻居节点添加回队列向量中,它们就会丢失指向正确父节点的指针。不过,它们确实保留了正确的 x,y 值。
任何帮助都会很棒!
由于 item
是一个局部变量,因此将 item
作为父节点设置其他节点是没有意义的。您可能应该更改queue
以存储指向节点的指针,而不是节点本身:
std::vector<Node *> stack;
stack.push_back(&start);
while (!stack.empty()) {
Node *item = stack.back();
stack.pop_back();
traveled.push_back(item);
std::vector<Node *> neighbors = getNeighbors(item);
// ...
}
问题是您设置父级的指针稍后无效。这并不是说指针丢失了,而是它们指向堆栈上稍后将被覆盖的项目。出于同样的原因,您可能还希望getNeighbors
返回指针向量,以便它返回原始节点而不是节点的副本。
另外,如果您确实打算将"最新"项目推送到"队列"上,那么您确实有一个堆栈,我会将您的变量重命名为这样。
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)