私は2つの関連する質問があります。1つは一般的なもので、もう1つは私が取り組んでいるプロジェクトに固有のものです。
- 一般に、コードの一部が特定の条件下で実行される反復(数百万)が多いループがある場合は、複数の条件ステートメントを含む1つのループ、またはそれらを含まない複数のループを使用する方が(より効率的)です。例えば。
例1:
while (something())
{
// some common code
if (condition_a)
// some code
if (condition_b)
// some code
// some more common code
}
例2:
if (condition_a && condition_b)
{
while (something())
{
// some common and specific code
}
}
else if (condition_a)
while (something()) //..
else if (condition_b)
// Another loop
else //...
例2では、条件が数百万回ではなく1回だけチェックされるため、冗長性を犠牲にしてより効率的なコードが得られるようです。ただし、一般的なコードが巨大である場合、または考えられる条件が多数ある場合、これは非常に冗長に見えます。
今私の特定の問題に。ファイルからポイントを読み取り、データ構造に挿入する関数があります。これは次のようになります。
while(reader-> read_point){//何かを行う//ポイントを挿入}
問題は、ユーザーが提供する基準に基づいて使用する必要があるポイントを読み取るためのいくつかの関数があることです。たとえば、read_point_inside_circle()、read_point_inside_rectangle()などです。
理想的には、関数ポインタを使用して正しい関数を事前に決定したいのですが、readerはReaderクラスのインスタンスであるため、それは不可能だと思います(可能であれば、すべての問題を解決できます)。
この状況では、条件のみが異なる複数のループがある場合、または冗長なコードを回避するために複数のifステートメントを使用する必要がある場合に適しています。
for(;;)
{
if (read_every_point)
if(!reader->read_point())
break;
else if (read_inside_circle)
if(!reader->read_inside_circle())
break;
else if // ...
}