web-dev-qa-db-ja.com

空のstdコンテナーのfront()から何を取得しますか?

front()が参照を返し、コンテナーが空の場合、何が得られますか、未定義の参照ですか?各empty()の前にfront()を確認する必要があるという意味ですか?

46
jackhab

未定義の動作が発生します。front()を呼び出す前に、empty()を使用してコンテナーに何かが含まれていることを確認する必要があります(コンテナーが空かどうかを確認します)。

53
anon

あなたは未定義の行動を得ます。

範囲チェックを取得するには、at(0)を使用します。これが失敗した場合、out_of_range例外。

13
graham.reeds

はい、前を使用する代わりに、グラハムが述べたように 'at'を使用できます。

ただし、at(0)は、リスト、キュー、スタックなど、一部のコンテナー(ベクター、デックのみ)でのみ使用可能です。これらの場合、「空の」チェックの安全性に頼らなければなりません。

3
Arun R

未定義の動作

1
anil

このインスタンスでfront()を呼び出す前に、コンテナが空でないことを常に確認する必要があります。 empty()を安全策として呼び出すのは良いことです。

もちろん、プログラムの設計によっては、常に空でないコンテナがあることは不変のステートメントになる可能性があり、front()を呼び出すたびにempty()の呼び出しを防止および保存できます。 (または少なくともコードの一部に?)

ただし、上記のように、プログラムで未定義の動作を避けたい場合は、それを強力な不変式にします。

1
yves Baumes