2

私は C++ STL を学んでいますが、STL を安全に使用する方法がわからないことが 1 つあります。

たとえば、コンテナを使用せずにコンテナを使用していることに常に気付いていif (!container.empty())ます。些細なことのように思えますが、バグの原因です。

STL を安全に使用するためのルールやガイドはありますか?

編集:これまでのところ、そのようなガイドJSF Air Vehicle - C++ Coding Standards - Joint Strike Fighterを1つ見つけましたが、今では古くなっているようです(または、ほとんどのルールは今日にも適用されますが、少なくとも更新されていません)

4

3 に答える 3

3

有効な STL を読み取ることができます。

空のコンテナーをチェックする代わりに、チェックを必要とせずに機能するコードを書く必要があります。

多くの実装には、使用エラーにフラグを立てるデバッグ モードがあります。ライブラリが提供するものを学びます。.at()また、インデックス演算子の代わりなど、一部のインターフェイスはチェック済みとして指定されます。

于 2013-10-03T05:10:29.913 に答える
2

container.empty()以下は、ほとんど不要なチェックを行ういくつかのコーディング ガイドラインです。

  • できれば初期化リストを使用して、コンテナを適切に初期化してください。これにより、良いスタートと空でないコンテナが得られます:-)
  • コンテナーに入力ストリームからの値を入力する必要がある場合は、std::back_inserter(シーケンス コンテナー) またはstd::inserter(連想コンテナー) を使用します。これにより、コンテナが適切に拡張されます。
  • コンテナを処理する必要がある場合は、コンテナ イテレータを受け入れる標準ライブラリ アルゴリズムを使用することをお勧めします。これらのアルゴリズムは、空の入力に対して適切に動作します。
  • 独自のアルゴリズムを記述する必要がある場合は、コンテナー イテレーターbegin()を使用しend()て、空のコンテナーが のようなステートメントでキャッチされるようにしit != end()ます。これにより、空のコンテナのようpop_back()なものを回避できます。erase()
  • 手書きの変更アルゴリズムでは、イテレータの無効化が発生する可能性があります。それらのルールを理解していることを確認してください。

最後の項目は、正しく理解するのがおそらく最も難しいものです。空のケースが特別なケースなしで自然に含まれるように、アルゴリズムを可能な限り一般的に記述したいと考えています。

Scott Meyers による効果的な STLは、標準ライブラリの初級/中級ユーザーに推奨されるガイドです。

于 2013-10-03T09:10:19.053 に答える
1

私の経験から、いくつかを以下に示します。

  • コンテナをトラバースしながら使用const_iteratorし、要素を変更する必要はありません
  • 演算子を使用し[]て連続した内容の要素にアクセスする場合は、常に最初に配列の境界を確認してください
  • 自分が何をしているのかを理解していない限り、コンテナをトラバースしている間はコンテナに要素を追加/削除しないでください
  • コンテナーを使用する設計では、コンテナー自体ではなく反復子を受け入れるように関数をモデル化します。このようにして、コードをより一般的にすることができます。

思い出し次第追加します。

于 2013-10-03T05:03:00.117 に答える