C++ STL チュートリアル


これまでの章では、C++ テンプレートの概念を学習しました。 C++ STL (標準テンプレート ライブラリ) は、共通のテンプレート クラスと関数を提供する強力な C++ テンプレート クラスのセットです。これらのテンプレート クラスと関数は、ベクトル、リンク リスト、および一般的に使用されるさまざまなアルゴリズムとデータ構造を実装できます。キュー、スタック。

C++ 標準テンプレート ライブラリのコアには、次の 3 つのコンポーネントが含まれています:

コンポーネント 説明
コンテナ (コンテナ) コンテナは、特定のタイプのオブジェクトのコレクションを管理するために使用されます。 C++ は、deque、list、vector、map など、さまざまなタイプのコンテナーを提供します。
アルゴリズムアルゴリズムはコンテナに作用します。これらは、コンテナーの内容の初期化、並べ替え、検索、変換などのさまざまな操作を実行する方法を提供します。
イテレータイテレータは、オブジェクトのコレクションの要素を走査するために使用されます。これらのコレクションは、コンテナーまたはコンテナーのサブセットである場合があります。

これら 3 つのコンポーネントにはすべて、複雑なタスクを簡単な方法で処理するのに役立つ豊富な事前定義関数が付属しています。

次のプログラムは、配列とよく似たベクター コンテナー (C++ 標準テンプレート) を示しています。唯一の違いは、サイズを拡張する必要がある場合にベクターが独自のストレージ要件を自動的に処理することです。上記 コードがコンパイルされて実行されると、次の結果が生成されます:

#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
   // 创建一个向量存储 int
   vector<int> vec; 
   int i;

   // 显示 vec 的原始大小
   cout << "vector size = " << vec.size() << endl;

   // 推入 5 个值到向量中
   for(i = 0; i < 5; i++){
      vec.push_back(i);
   }

   // 显示 vec 扩展后的大小
   cout << "extended vector size = " << vec.size() << endl;

   // 访问向量中的 5 个值
   for(i = 0; i < 5; i++){
      cout << "value of vec [" << i << "] = " << vec[i] << endl;
   }

   // 使用迭代器 iterator 访问值
   vector<int>::iterator v = vec.begin();
   while( v != vec.end()) {
      cout << "value of v = " << *v << endl;
      v++;
   }

   return 0;
}

上記の例で使用されているさまざまな関数については、いくつか注意すべき点があります:

    push_back( ) メンバー関数は最後に値を挿入します。ベクトルのサイズは必要に応じて拡張されます。
  • size() 関数はベクトルのサイズを表示します。
  • begin() 関数は、ベクトルの先頭を指す反復子を返します。
  • end() 関数は、ベクトルの末尾を指す反復子を返します。