Вот мой код:итерация через вектор STRUCT элементов
#include<iostream>
#include <vector>
#include <stack>
using namespace std;
struct node {
node *parent;
int x, y;
float f, g, h;
};
node findmin(vector<node> open)
{
int mini=2000000;
node iter,mininode;
std::vector<node>::iterator it;
for(it = open.begin(); it != open.end(); ++it) {
if(it.f<mini)
{
mini=it.f;
mininode=it;
}
}
return mininode;
}
int main() {
vector<node> open;
vector<node> closed;
node start;
start.x=50;
start.y=50;
start.f=0;
start.g=0;
start.h=0;// you can take it as zero. works instead of the actual distnace between goal and start.
node goal;
goal.x=53;
goal.y=50;
goal.f=-1;
goal.g=-1;
goal.h=0;
// put the starting node on the open list
open.push_back(start);
node current,temp;
current=findmin(open);
// THE EDIT CODE GOES HERE.
return 0;
}
Каким-то образом итерации через все векторные элементы не работают. Моя структура: node
. open
является вектор node
элементов. Я пытаюсь выполнить итерацию через все элементы node
в функции findmin
. Возможна ли коррекция и причина?
EDIT:
Теперь предположим, что я хочу, чтобы использовать эту функцию, как это, поместив следующие строки соответственно в основной() в коде выше:
node current,temp;
current=findmin(open);
cout<<current.f;
for(vector<node>::iterator it = open.begin(); it != open.end(); ++it) {
if(*it==current)
{
open.erase(*it);
}
}
Почему это не работает?
Помните, что итераторы имеют аналогичные указатели, поэтому вы должны их разыменовать правильно, например, 'It-> f'. Или, возможно, используйте [диапазон для цикла] (http://en.cppreference.com/w/cpp/language/range-for). –
Какой полуналоженный компилятор, который вы используете, компилирует это? – dmg
'it-> f' работает, но у меня есть еще одна проблема. см. EDIT выше. –