0

プライオリティ que を作成して、それをテンプレート クラスにしようとしています。ポップすると、型 T を返す必要があります。何も返さない方法や、キューに何もない場合にクラッシュを回避する良い方法はありますか?

4

3 に答える 3

4

ここで予想される動作は、例外をスローすることです。ユーザーは、ポップを試みる前にキューが空であることを確認する必要があります。null を返すこともできますが、型 T が null の値を持たない場合に限ります。それ以外の場合、エラーが発生したため、またはキュー内の次の値が null であったためにこれが返されている場合はあいまいです。

于 2013-05-03T05:35:08.787 に答える
1

テンプレートは質問とは無関係です。

この状況に対処する一般的な方法がいくつかあります。

  1. オブジェクトをヒープに格納します。削除すると、オブジェクトをデータ構造から切り離し、オブジェクト自体の代わりにオブジェクトへの参照 (ポインター) を返します。データ構造が空の場合は、NULL を返します。
  2. popキューが空でない場合にのみ有効と定義します。したがって、ユーザーは呼び出す前に空チェックを実行する必要がありますpop(機能を提供する必要がありisEmptyます)。この前提条件が満たされない場合、例外/エラーの戻りは有効な処理です。
于 2013-05-03T05:39:50.690 に答える
0

一般的に言えば、pop操作は値を返すべきではありません。これは、返された型のコピー コンストラクターが例外をスローする可能性があるためです。その場合、値はキューから削除され、どこにもコピーされていないため、単純に消えてしまいます。

top代わりに、データ構造の最上位にあるオブジェクトへの参照を返す関数とpop、最上位の要素を削除するが何も返さない関数の 2 つの操作が必要です。見るとstd::queue、メンバーが表示され、最上位の要素への参照が返されます。void pop()reference front()

今あなたの質問に行きます。<g>空のキューをポップするとエラーになります。標準ライブラリでは、未定義の動作が発生します。エラー チェック用のコードを追加する場合は、例外をスローするか、プログラムを中止する必要があります。私は後者の方に傾きます。ポップする要素があることを呼び出し元のコードが判断していない場合は、例外を確実に処理するように記述されていない可能性があります。一方、GUI では、現在の操作を終了する例外をスローすることが適切な場合があります。これにより、アプリケーションは実行されたままになり、次のユーザー要求を待ちます。

于 2013-05-03T11:41:33.867 に答える