- レンプレート
いわゆるテンプレートは、「1 つ以上の不特定の型」用に記述された関数またはカテゴリです。テンプレートを使用する場合、型をパラメータとして明示的または暗黙的に渡すことができます。
たとえば、次の場合は 2 つの数値のうち大きい方を返します。
template<class T>
inline const T& max(const T& a,const T& b)
{
return a < b ? : b : a;
}
最初の行では、関数の呼び出し時に呼び出し元によって指定される任意のデータ型として T を定義します。この型はクラスによってガイドされますが、型自体がクラスである必要はありません。テンプレート定義で使用される操作を提供する限り、任意のデータ型をこのテンプレートに適用できます。
- 名前空間¶
ネームスペースは、さまざまな識別子を名前付きスコープにグループ化します。ネームスペース内のすべての識別子を定義すると、ネームスペース自体の名前が、他のグローバル シンボルと競合する可能性がある唯一の識別子になります。ネームスペース内のシンボルを参照するには、識別子の前にネームスペースの名前を追加する必要があります。名前空間の名前と識別子は :: で区切られます。
namespace AA {
class File;
void myGlobalFunc;
...
}
...
//using a namespace identifier
AA::File obj;
AA::myGlobalFunc();
- main() の定義
C++ 標準仕様によれば、正しく移植可能な main() は 2 つだけです。
int main()
{
...
}
int main(int argc, char* argv[])
{
...
}
argv はコマンド ライン パラメーターであり、char** として定義することもできます。関数の戻り値の型は int として指定する必要があります。
- 名前空間標準
異なるモジュールやライブラリを使用すると、異なるオブジェクトに対して同じ識別子を使用する可能性があるため、名前の競合がよく発生します。いわゆる名前空間は、識別子の特定の可視範囲を指します。
実際、C++ 標準ライブラリのすべての識別子は、std と呼ばれる名前空間で定義されています。
C++ 標準ライブラリの識別子には、次の 3 つの選択肢があります。
①識別子を直接指定
std::cout << std::hex << 3.4 << std::endl;
②使用using declaration
using std::cout;
using std::endl;
cout << std::hex << 3.4 << endl;
③ using ディレクティブを使用します。std で定義されたすべての識別子を有効にすることができます
using namespace std;
cout << hex << 3.4 << endl;
- STLコンポーネント
①コンテナコンテナは、ある種類のオブジェクトの集合を管理するために使用されます。プログラムのさまざまなニーズに応えて、STL はさまざまなコンテナ モデルを用意しました。一般的なのは
配列;ベクトル;リスト;forward_list;キュー;デキュー;スタック;
セット/マルチセット;マップ/マルチマップ;unordered_set/unowned_map;
②イテレータイテレータは、オブジェクトクラスタの要素に対する走査アクションを実行するために使用されます。イテレータの主な利点は、クラスタ内の次の要素に操作を進めるための共通インターフェイスの小さなセットをすべてのコンテナに提供できることです。イテレータは、一種のスマート ポインタと考えることができます。
③アルゴリズムクラスター内の要素を処理するために使用されるアルゴリズム。
④アロケータ: スペースの設定と管理を担当します アロケータは、実装の観点から見ると、動的なスペースの設定、スペースの管理、スペースの解放を実現するクラス テンプレートです。
⑤アダプター アダプター、コンテナー、ファンクター、またはイテレーターのインターフェースを変更するために使用されるもの (ソケットの 220V の電圧がコンピューターに接続される前に変圧器を通過する必要があるのと同じです)
⑥ Functor Function オブジェクト、関数のように動作するクラス。
STL の基本概念は、データと操作を分離することです。データはコンテナ クラスによって管理され、操作はカスタマイズ可能なアルゴリズムによって定義され、イテレータは 2 つの間の接着剤として機能し、任意のアルゴリズムが任意のコンテナと対話できるようにします。
STL はデータとアルゴリズムを別々に扱いますが、STL の概念はある意味、オブジェクト指向プログラミング (OOP) の考え方と矛盾します。ただし、さまざまなコンテナとさまざまなアルゴリズムを組み合わせることができ、小さなフレームワーク内で非常に高い柔軟性が得られます。