データ構造実験における余裕のあるオープン-C++STLの使用方法

3515 ワード

前の5つの文章の紹介を経て、実現しなければならないほど複雑なコードを見て、多くの学生が死んだ心を持っているに違いない(頭を触って、強くしなければならない).その文章では、データ構造試験でどのように余裕を持って開くかを紹介しましょう.
変なこと考えないで、私はまじめにC++STLを紹介します.
STLとは
STLはStandard Template Libraryの略です.
「C++標準ライブラリ--独学チュートリアルと参考マニュアル」の第2版の英語版の本の冒頭を翻訳して、どんなSTLについて簡単な認識を持っていますか.
C++言語は発明された後、対象言語向けに事実上の標準(a de facto standard)となり、標準化の目標となった.標準を確立してこそ、プログラムが一度に作成された後、PCから大型機まで異なるハードウェアプラットフォームで実行できることを確保することができます.さらに、標準ライブラリ(a standard library)の構築により、プログラマは、汎用的なコンポーネントおよびより高い階層の抽象パッケージを使用しながら移植性を失わず、符号化作業を最初から開始する必要がない.C++の第2版では、C++11と呼ばれています.より強力なC++標準ライブラリを使用することができます.このライブラリは、次の機能と概念をサポートしています.
  • 入出力(I/O)クラス;
  • 文字列タイプと正規表現;
  • は、動的配列、リンクテーブル、ツリー、ハッシュテーブルなどの多くのデータ構造を有する.
  • 複数のアルゴリズム、例えばソートアルゴリズム;
  • はマルチスレッドクラスと並行している.
  • 国際化サポートクラス;
  • 数値クラス;
  • その他のユーティリティ

  • C++STLには言語自体を拡張するための様々なデータ構造、アルゴリズム、その他の特性のクラスが多数提供されていることがわかる.C標準ライブラリと同様に、C++標準ライブラリの各クラスおよびユーティリティを合理的に使用すれば、プログラムの堅牢性を保証すると同時に、私たちが作成したプログラムの複雑さを大幅に簡素化することができます.
    STLの使い方
    STLの使用方法を説明する前に、STLのデータ構造に関連するいくつかのクラスとコンテナを見てみましょう.
  • リニアコンテナ:array、vector、deque、forward_list、list
  • コンテナアダプタ(container adaptors):stack、queue、priority_queue
  • 関連コンテナ:set、multiset、map、multimap
  • vector(ベクトル、不定長配列)、stack(スタック)、queue(キュー)、priority_queue(優先キュー)、set(集合)、map(マッピング)という名前はおなじみに見えますか?はい、これらはすべてC++STLが提供する容器です.△ああ、どうして早く言わなかったんですか.
    最も重要なのは、これらのコンテナがテンプレートコンテナ(template container)であるか、すなわち、これらのコンテナに格納されている要素オブジェクトは、さまざまなタイプをサポートすることができる.たとえば、食堂の行列を表す必要があります.次のコードで定義できます.
    #include 
    
    class person
    {
        string name;
        string sex;
        ...
    };
    
    ...
    
    int main ()
    {
      queue myqueue;
    
      myqueue.push_back(person("  ", "male"));
      myqueue.push_back(person("  ", "female"));
    
      ...
    
      while (!myqueue.empty())
      {
        // do your work here.
      }
      ... 
    
      return 0;
    }
    

    キュー内の要素オブジェクトがpersonクラスインスタンスであるmyqueueというキューを定義した.このキューはqueueコンテナが提供するエンキュー、デキューなどの操作で操作できますが、STL内の各異なるコンテナの使用インタフェースを理解するだけでいいです.
    どうですか.世界が急に美しい感じがしますか?
    よく使われるコンテナの中には、C++STLと同じ名前のヘッダファイルが定義されています.使用するときに、そのヘッダファイルをソースコードに含めるだけでいいです.たとえば、queueを使用する場合は、元のファイルで#include を使用する必要があります.stackを使用するには、元のファイルに`#include``を使用して導入する必要があります.
    では、C++STLの使用方法をどのように理解すればいいですか?以下のリソースまたは書籍はC++STLの良い入門資料です.
  • www.cplusplus.comはC++言語とその標準を紹介する英語のウェブサイトです.
  • 《C++標準ライブラリ——独学教程と参考マニュアル》第2版英語版、人民郵便出版社;この本は比較的厚く、上下2冊に分かれている.
  • 《C++STL中国語版》中国電力出版社;この本は古いです.

  • STLは万能ですか?
    STLは、いくつかの一般的なコンポーネント、アルゴリズム、およびユーティリティを提供します.しかし、すべての問題を解決できるわけではありません.
    我々が学習したデータ構造におけるツリー,図などの概念と知識点では,STLはそれに対応するコンテナクラスを提供していない.しかし、STLの標準的なコンテナクラスを組み合わせることで、より複雑で、私たちのニーズに合ったデータ構造を構築することができます.例えば、vector > graphで図を表す隣接表の表現を用いることができる.
    STLが提供する汎用コンポーネントにより、より複雑なコンテナを構成し、必要なデータ構造を表すことができます.このステップを達成するには、STLと解決した問題について十分な理解が必要です.そのため、STLは万能ではなく、天剣や屠龍刀に頼るように、使用者自身の武力にかかっている.どのようにSTLを制御するかは、STLの各コンテナ、アルゴリズムの使用インタフェースを熟知する必要があるほか、自身の問題分析、符号化能力を強化する必要がある.
    ある学友会は、STLがあって、どうしてまた私达に自分でSTLの中で既存の构造を実现するように要求しますか?
  • 私たちのコースはデータ構造とアルゴリズムのコースです.(注意、この話をする時、先生は黒板をたたく動作をします~~~)
  • はツールと製造ツールを使用しますが、どの方法が思考の向上に役立つと思いますか?ツールの製造方法を知ることで、ツールをよりよく理解し、使用することができます.
  • 思考とスキルは、それらの価値を体現するのに時間の蓄積が必要です.

  • どのように余裕を持って掛けます
    前節の文字の原則に従って、ツールを製造する必要がある場合はツールを製造し、ツールを使用する必要がある場合はツールを使用します.
    たとえば、迷路の問題では、検索パスを記録するためにスタックを使用する必要がある場合は、ツールを製造するのではなく、ツールを使用する必要があります.ツリーの階層遍歴においても,遍歴した各ノードをキューで保存する必要がある以上,STLのqueueコンテナをそのまま使用すればよい.