0

リスト クラスを使用するテンプレート クラスの関数を定義しています。

このリスト クラスに erase 関数を定義しました。この関数は、消去が成功した場合は true を返し、消去が失敗した場合は false を返します。ここで行う必要があるのは、この関数を呼び出すことだけです。

ただし、リストのサイズ n をカウントする必要があり、list.erase(itr.list_iter) 呼び出しが true を返す場合にのみそれをデクリメントしたいと考えています。

もっと簡潔に言えば、次のコード行は list.erase(itr.list_iter) 関数を呼び出し、n をデクリメントし、成功した場合にのみ refresh() を呼び出しますか? それとも、実際にはリスト内の要素を消去しませんか?

void erase(iterator itr) {
    if(list.erase(itr.list_iter)) {
        --n;
        refresh();
    }
}

どうもありがとうございました。

4

1 に答える 1

1

はい、できます。常に呼び出されます。これは以下と同等です:

{
  bool res = foo();
  if(res)
  {
    do_stuff();
  }
}

次の場合は、内部で変数を宣言することもできます。

if(int res = int_foo())
{
  do_smth(res);
}
else // res == 0
{
  do_smth_else();
}

それはすべての本に書かれています=)

于 2013-03-29T12:28:17.327 に答える