假设我有一个多边形向量,其中每个多边形都包含一个点向量。我必须在我的代码中多次迭代所有多边形的所有点,我最终不得不一遍又一遍地编写相同的代码:
for(std::vector<Polygon*>::const_iterator polygon = polygons.begin();
polygon != polygons.end(); polygon++)
{
for(std::vector<Point>::const_iterator point = (*polygon)->points.begin();
point != (*polygon)->points.end(); point++)
{
(*point).DoSomething();
}
}
我真的觉得对于两个简单的迭代来说这是很多代码,并且感觉它阻塞了代码并干扰了可读性。
我认为的一些选择是:
- 使用#defines - 但它会使不可移植(用于代码的其他部分)。此外,#defines 现在被认为是邪恶的。
- 遍历 vector->size() - 这似乎不是最优雅的方式;
- 使用函数指针调用方法 - 但在这种情况下,应该在循环内部的代码将远离循环。
那么,最干净、最优雅的方式是什么?