0
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;
}
};
不知道我在这个迭代器中做错了什么。这个类迭代器假设循环遍历CCity类,然后比较我想要返回的方块。 一个问题,我可以看到它遇到一个无限循环不知道如何解决它?有任何想法吗?C++迭代器类
我只是假设mTiles是一个向量,那么如果你调用pos大于大小的构造函数,那么迭代器上的所有*后面的操作都会爆炸。此外,像删除一个元素的矢量的任何改变将(可能)使它炸毁。 – Surt 2014-09-23 21:44:59