【发布时间】:2014-09-23 21:20:36
【问题描述】:
class ZoningIter
{
private:
CTile::Zonings mZoning;
CCity *mCity;
int mPos; ///< Position in the collection
public:
ZoningIter(CCity *tile, int pos, CTile::Zonings zoning) : mCity(tile), mPos(pos), mZoning(zoning)
{
while (mPos < mCity->mTiles.size())
{
if (mCity->mTiles[mPos]->GetZoning() == mZoning)
break;
else
mPos++;
}
}
bool operator!=(const ZoningIter &other) const
{
return mPos != other.mPos;
}
std::shared_ptr<CTile> operator *() const
{
return mCity->mTiles[mPos];
}
const ZoningIter& operator++()
{
auto size = mCity->mTiles.size();
auto myzone = mCity->mTiles[mPos]->GetZoning();
while (mPos < size-1)
{
++mPos;
if (mCity->mTiles[mPos]->GetZoning() == mZoning)
break;
}
return *this;
}
};
不确定我在这个迭代器中做错了什么。此类 Iterator 假设循环遍历 CCity 类并将返回的图块与我正在寻找的图块进行比较。 我可以看到它陷入无限循环的一个问题不知道如何解决?有什么想法吗?
【问题讨论】:
-
我只是假设 mTiles 是一个向量,那么如果你使用大于大小的 pos 调用构造函数,那么迭代器上的所有 以下 操作都会崩溃。此外,对向量的任何更改(例如删除元素)都会(可能)使其爆炸。