【发布时间】:2012-10-31 17:17:55
【问题描述】:
我有一个问题要问。
所以,我有一个结构调用 Node 如下所示:
struct Node
{
int xKoor, yKoor;
Node *parent;
char nodeId;
float G;
float H;
float F;
Node(int x, int y, int id, Node * par)
{
xKoor = x;
yKoor = y;
nodeId = id;
parent = 0;
}
Node(int x, int y, char id)
{
xKoor = x;
yKoor = y;
nodeId = id;
}
};
我有一个包含此结构元素的列表:
list<Node*> OPEN;
此列表的大小随时间而变化。
我需要做的是找到具有最小F值的Node对象,然后从列表中弹出该对象。
所以,我试着写了一个如下所示的函数:
void enKucukFliNodeBul(list<Node*> OPEN)
{
list<Node*>::iterator it = OPEN.begin();
for(it = OPEN.begin(); it != OPEN.end(); it++)
{
if(it._Ptr->_Myval->F < it._Ptr->_Next->_Myval->F)
{
}
}
}
但我被困住了。我是 STL 的新手。我该如何解决这个问题?
我最好的问候...
【问题讨论】:
-
(*it)->F而不是it._Ptr->_Myval->F。你需要2个迭代器。就像您正在遍历一维数组 - 使用迭代器获取当前位置和一个 - 用于下一个。或者相反。 -
不要担心 STL、C++ 或类似的东西。首先用伪代码制定算法,甚至,天堂禁止,流程图......
-
拜托!不要使用内部实现细节!将标准库中以下划线开头的任何内容视为不存在。它们不是界面的一部分。 (如果代码甚至可以编译,我会感到惊讶)
-
@R.MartinhoFernandes 您好,先生,我真的不明白您的意思。
-
BTW 为什么要将链接节点存储在
std::list中?它已经是一个链表,所以你在做什么似乎有点奇怪。