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