ポリゴンのベクトルがあり、各ポリゴンにポイントのベクトルが含まれているとします。コード内のすべてのポリゴンのすべてのポイントを何度も繰り返す必要があり、同じコードを何度も書く必要があります。
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();
}
}
これは2回の単純な反復では多くのコードであり、コードを詰まらせて読みやすさを妨げているように感じます。
私が思ったいくつかのオプションは次のとおりです。
- #definesを使用します-ただし、移植性がなくなります(コードの他の部分で使用するため)。さらに、#definesは最近悪と見なされています。
- vector-> size()を反復処理します-これは最もエレガントな方法ではないようです。
- 関数ポインタを使用してメソッドを呼び出す-ただし、この場合、ループ内にあるはずのコードはループから遠くなります。
それで、これを行うための最もクリーンでエレガントな方法は何でしょうか?