1

C++ でキューを作成しています (STL を使用することは想定されていません)。デキュー関数は、キューから削除する整数を返す必要があります。しかし、キューが空の場合、何を返すべきでしょうか? 例外をスローする必要がありますか? それとも null を返す必要がありますか (しかし、それは本質的にゼロであり、0 を返しているように見えるため、混乱することはありません)?

どんな助けでも大歓迎です。

4

3 に答える 3

1

次の 3 つのオプションがあります。

  • キューが空の場合boost::optional<T> pull()に戻る関数を用意します。boost::none
  • スローstd::out_of_rangeまたは同様の例外。
  • 空のキューから UB としてプルするドキュメント (通常、これは必要ありません)。

値が存在できないことを型レベルで明示的にする最初のオプションが好きですが、2 番目と 3 番目のオプションはドキュメント/コントラクト レベルにあり、コンパイラによって簡単に検証することはできません。

于 2013-10-30T22:13:14.627 に答える
0

stackとの標準バージョンでは、次の要素にアクセスして削除するqueue機能が分割されています。

stack<int> s;
// put some stuff in s
int i = s.top; // gets the top element
s.pop(); // removes the element you just retrieved in the previous operation

これによりpop()、空のコンテナーで呼び出すことができます (そして何もしません)。top( orfrontおよびaのback関数queue) は、基になるコンテナー (指定可能) に依存しており、空のコンテナーで呼び出された場合、通常は未定義の動作をします。

したがって、標準のメソッドに従って実行したい場合は、空のコンテナーで呼び出すことは未定義であると簡単に言えます。そうでない場合は、好きなようにできます(元カノの電話番号を教えてください)。

于 2013-10-30T22:44:07.027 に答える