遍历结构元素向量
iterating through a vector of struct elements
这是我的代码:
#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
元素的向量。我正在尝试迭代findmin
函数中的所有node
元素。可以建议更正和原因吗?
编辑:
现在假设我想通过在上面的代码中适当地将以下行放在main()中来像这样使用这个函数:
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);
}
}
为什么这不起作用?
- 下次为您的问题提供更多信息。你需要更具体,告诉是编译错误,还是运行时以及发生了什么错误。
-
修复您的
findmin
功能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; }
-
不要通过
vector<node>
.传递其引用(或更好的常量引用)。因为在您的示例中,将复制向量。并使用const_iterator
.node findmin( const vector<node>& open ) { /**/ }
-
像这样在循环中
erase
for (vector<node>::iterator it = open.begin(); it != open.end(); /* ++it*/) { if(*it == current) it = open.erase(it); else ++it; }
但是你需要重载
operator==
,或者在语句if
写一些其他条件。
我看不出!open.empty()
有任何理由应该计算false
,因为"开放"向量在循环体中没有受到影响。所以你的主循环中有一个无限循环。我认为这是错误。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 在 C++ 中输出枚举类类型的向量元素
- 用向量的向量元素初始化向量的空向量
- 为什么不允许使用可变长度数组作为向量元素?
- 在函数中传递向量元素
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 返回向量元素的 l 值的正确方法是什么?
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何在C++中从一个向量元素减去std::unorderede_map向量元素并更新它
- C++:向量元素赋值导致访问冲突
- 将向量元素与字符串元素进行比较,而不初始化向量
- 从2D矢量中找出最小尺寸的向量元素的更好方法
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 使用递归C++向量元素的总和
- 如何查找为数组中的最低值编制索引的向量元素
- 限制指针访问STL ::向量元素
- 访问索引指向向量元素时的seg故障 - 做错了什么
- 如何使用指针访问向量元素的各个元素
- 向量元素数据损坏了Find()操作
- 将字符值分配给向量元素.C