我正在使用自定义数据结构“块”,并在列表中存储了几个块:
list openList<block>
我现在需要遍历每个块,访问数据成员'f'(整数)并检查哪个具有最低的f成本。
我的逻辑是简单地指针指向最佳块值,而不是每次复制最佳块值。
这是我的代码:
for (std::list<block>::iterator openi = openList.begin(); openi != openList.end(); openi++){
if ((*openi).f < bestFCost){
bestFCost = (*openi).f;
// Here's where I need help....
}
}
我不认为我对迭代器的要求是可能的。我想设置
block * Q
迭代器指向的数据,但我需要整个对象而不是数据成员。
编辑: 很简单的解决方案我用错字(Q *而不是* Q)来启动Q!
阻止* Q = 0;
然后在循环的一部分我评论道:
Q = &(*openi)
:)
答案 0 :(得分:1)
*openi
的类型为block
,对吗?所以你可以简单地拿出那个地址:
block * Q = &*openi;
&*
似乎是多余的,但*
是迭代器上的运算符,返回block
类型,而不是*
是解除引用的场景,并且&
再次引用它。
或者您可以存储迭代器本身:
std::list<block>::iterator Q = openi;
或者您可以按值存储对象,假设您实现了复制构造函数:
block Q = *openi;