***
3756 ワード
学習クラスの部分学習後,演算子リロードとSTL部分学習を行った.このようにして、この部分の総括と復習を行います.
一.演算子の再ロード
1. 演算子を再ロードする理由:
C++あらかじめ定義された演算子の操作オブジェクトは、基本的な組み込みデータ型に限定されますが、カスタマイズされたタイプ(クラス)では操作できません.しかし、多くの場合、私たちが定義したタイプに対して類似の演算を行う必要があります.この場合、このような演算子を再定義し、自分のニーズを満たすために新しい機能を与える必要があります.演算子の再ロードにより、ユーザーがカスタマイズしたデータがより簡潔に動作します.
2.リロード演算子の制限:
リロード演算子関数は、演算子について新しい解釈を行うことができますが、元の基本的な意味は変わりません.
1.演算子の優先度を変更しない
2.演算子の結合を変更しない
3.演算子に必要なオペランドを変更しない
4.新しい演算子は作成できません
3.演算子関数は、メンバー関数または友元関数として再ロードできます.
両者の違い:
両目演算子の場合、メンバー演算子関数のパラメータテーブルには、演算子の右オペランドとして使用されるパラメータが1つしかありません.この場合、現在のオブジェクト(友元関数ではそうはいきません)は演算子の左オペランドとして使用され、thisポインタによって関数に暗黙的に渡されます.
単一演算子の場合、メンバー演算子関数のパラメータテーブルにはパラメータがありません.現在のオブジェクトが演算子のオペランドとして使用されます.
4.両者比較:(1.)メンバー演算子関数は、友元演算子関数よりも1つ少ないパラメータです.
(2.)両目演算子は、一般に、友元演算子関数またはメンバー演算子関数として再ロードできますが、オペランドのタイプが異なる場合は、友元関数を使用する必要があります.
5.いくつかの特殊な状況:
(1.)演算子[]と()は二元演算子であり、メンバー関数のみで再ロードでき、友元関数で再ロードできません.
(2.)リロード出力(入力)演算子は、友元関数でのみリロードできます.
6.友元関数リロード出力(入力)演算子:
(1.)istreamおよびostreamは、C++の事前定義されたストリームクラスです.
(2.)cinはistreamのオブジェクト、coutはostreamのオブジェクトです.
(3.)演算子<
(4.)演算子>>istreamによって抽出操作として再ロードされ、基本タイプのデータを入力します.
出力演算子の定義"<
入力演算子">>を定義するリロード演算子の一般的なフォーマットは次のとおりです.
二.STL
1. STLの概要
(1. )STLはC++標準ライブラリの核心であり、標準ライブラリ全体の構造に深刻な影響を及ぼしている.
(2.)STLは、異なるニーズに適応できるいくつかの集合クラス(collection class)と、これらのデータ集合上で動作するアルゴリズム(algorithm)から構成される
(3.)STL内のすべてのコンポーネントはテンプレート(template)で構成され、その要素は任意のタイプであってもよい.
(4.)STLはすべてのC++コンパイラとすべてのオペレーティングシステムプラットフォームがサポートするライブラリです.
2.STLコンポーネント
コンテナ(Container):クラスオブジェクトの集合を管理する
反復器(Iterator)-オブジェクトのセットを巡回します.
アルゴリズム(Algorithm)——集合内の要素を処理する
コンテナアダプタ
関数オブジェクト(functor)
3.STL容器カテゴリ
(1.)シーケンシャルコンテナ-配列順序はタイミングと位置に依存します
(2.)関連コンテナ-配列順序は特定の基準に依存します.
STL容器の共通能力:
すべてのコンテナに格納されている値は、参照ではなく値です.保存するコピーがない場合は、コンテナ要素はポインタのみです.
すべての要素は1つの順序(order)を形成し、各要素を同じ順序で1回または複数回遍歴することができる.
STL容器要素の条件:
コピーコンストラクタによるコピーが可能である必要があります
付与演算子で付与操作を完了できる必要があります
破棄は、構造関数で完了する必要があります.
シーケンスコンテナ要素のデフォルトのコンストラクタは使用可能である必要があります.
いくつかのアクションではoperator=を定義する必要があります.たとえば、検索操作などです.
関連コンテナはソート基準を定義する必要があります.デフォルトはoperatorの再ロードです.
4.STL容器の共通操作:
初期化:
空のコンテナを生成
1.別のコンテナ要素を初期値として初期化を完了
2.配列要素を初期値として初期化を完了します.
サイズに関するアクション:
size()は、現在のコンテナの要素数を返します.
Empty()-容器が空かどうかを判断
max_size()-コンテナに収容できる最大要素の数を返します.
比較
比較操作の両端のコンテナは同じタイプでなければなりません
2つのコンテナ内のすべての要素が順番に等しい場合、この2つのコンテナは等しい
ある容器が別の容器より小さいかどうかを辞書順で判断する
割り当てと交換
swapは、付与操作の効率を向上させるために使用される
反復器に関連する操作
begin()-最初の要素を指す反復器を返します.
end()-最後の要素を指す反復器を返します.
rbegin()-逆反復器を返し、逆遍歴の最初の要素を指します.
rend()-逆反復器を返し、逆ループの最後の要素の後を指します.
要素アクション
Insert(pos,e)-要素eのコピーを反復器posが指す位置に挿入します.
erase(beg,end)-【beg,end】区間内のすべての要素を除去
clear()-すべての要素を除去
5.反復器
STLコンテナ内の要素のすべてまたは一部を巡回できるオブジェクト
コンテナ内の特定の位置を指定します.
6.コンテナ:
学習によりvector、map/multimap、set/multiset
アルゴリズムの問題のほんの一部を勉強したことも知っていますが、ここでは詳しくまとめません.
一.演算子の再ロード
1. 演算子を再ロードする理由:
C++あらかじめ定義された演算子の操作オブジェクトは、基本的な組み込みデータ型に限定されますが、カスタマイズされたタイプ(クラス)では操作できません.しかし、多くの場合、私たちが定義したタイプに対して類似の演算を行う必要があります.この場合、このような演算子を再定義し、自分のニーズを満たすために新しい機能を与える必要があります.演算子の再ロードにより、ユーザーがカスタマイズしたデータがより簡潔に動作します.
2.リロード演算子の制限:
リロード演算子関数は、演算子について新しい解釈を行うことができますが、元の基本的な意味は変わりません.
1.演算子の優先度を変更しない
2.演算子の結合を変更しない
3.演算子に必要なオペランドを変更しない
4.新しい演算子は作成できません
3.演算子関数は、メンバー関数または友元関数として再ロードできます.
両者の違い:
両目演算子の場合、メンバー演算子関数のパラメータテーブルには、演算子の右オペランドとして使用されるパラメータが1つしかありません.この場合、現在のオブジェクト(友元関数ではそうはいきません)は演算子の左オペランドとして使用され、thisポインタによって関数に暗黙的に渡されます.
単一演算子の場合、メンバー演算子関数のパラメータテーブルにはパラメータがありません.現在のオブジェクトが演算子のオペランドとして使用されます.
4.両者比較:(1.)メンバー演算子関数は、友元演算子関数よりも1つ少ないパラメータです.
(2.)両目演算子は、一般に、友元演算子関数またはメンバー演算子関数として再ロードできますが、オペランドのタイプが異なる場合は、友元関数を使用する必要があります.
5.いくつかの特殊な状況:
(1.)演算子[]と()は二元演算子であり、メンバー関数のみで再ロードでき、友元関数で再ロードできません.
(2.)リロード出力(入力)演算子は、友元関数でのみリロードできます.
6.友元関数リロード出力(入力)演算子:
(1.)istreamおよびostreamは、C++の事前定義されたストリームクラスです.
(2.)cinはistreamのオブジェクト、coutはostreamのオブジェクトです.
(3.)演算子<
(4.)演算子>>istreamによって抽出操作として再ロードされ、基本タイプのデータを入力します.
出力演算子の定義"<
ostream& operator<
入力演算子">>を定義するリロード演算子の一般的なフォーマットは次のとおりです.
istream& operator>>(istream& in,class_name&obj)
{
in>>obj.item1;
...
in>>obj.itemn;
return in;
}
二.STL
1. STLの概要
(1. )STLはC++標準ライブラリの核心であり、標準ライブラリ全体の構造に深刻な影響を及ぼしている.
(2.)STLは、異なるニーズに適応できるいくつかの集合クラス(collection class)と、これらのデータ集合上で動作するアルゴリズム(algorithm)から構成される
(3.)STL内のすべてのコンポーネントはテンプレート(template)で構成され、その要素は任意のタイプであってもよい.
(4.)STLはすべてのC++コンパイラとすべてのオペレーティングシステムプラットフォームがサポートするライブラリです.
2.STLコンポーネント
コンテナ(Container):クラスオブジェクトの集合を管理する
反復器(Iterator)-オブジェクトのセットを巡回します.
アルゴリズム(Algorithm)——集合内の要素を処理する
コンテナアダプタ
関数オブジェクト(functor)
3.STL容器カテゴリ
(1.)シーケンシャルコンテナ-配列順序はタイミングと位置に依存します
(2.)関連コンテナ-配列順序は特定の基準に依存します.
STL容器の共通能力:
すべてのコンテナに格納されている値は、参照ではなく値です.保存するコピーがない場合は、コンテナ要素はポインタのみです.
すべての要素は1つの順序(order)を形成し、各要素を同じ順序で1回または複数回遍歴することができる.
STL容器要素の条件:
コピーコンストラクタによるコピーが可能である必要があります
付与演算子で付与操作を完了できる必要があります
破棄は、構造関数で完了する必要があります.
シーケンスコンテナ要素のデフォルトのコンストラクタは使用可能である必要があります.
いくつかのアクションではoperator=を定義する必要があります.たとえば、検索操作などです.
関連コンテナはソート基準を定義する必要があります.デフォルトはoperatorの再ロードです.
4.STL容器の共通操作:
初期化:
空のコンテナを生成
1.別のコンテナ要素を初期値として初期化を完了
2.配列要素を初期値として初期化を完了します.
サイズに関するアクション:
size()は、現在のコンテナの要素数を返します.
Empty()-容器が空かどうかを判断
max_size()-コンテナに収容できる最大要素の数を返します.
比較
比較操作の両端のコンテナは同じタイプでなければなりません
2つのコンテナ内のすべての要素が順番に等しい場合、この2つのコンテナは等しい
ある容器が別の容器より小さいかどうかを辞書順で判断する
割り当てと交換
swapは、付与操作の効率を向上させるために使用される
反復器に関連する操作
begin()-最初の要素を指す反復器を返します.
end()-最後の要素を指す反復器を返します.
rbegin()-逆反復器を返し、逆遍歴の最初の要素を指します.
rend()-逆反復器を返し、逆ループの最後の要素の後を指します.
要素アクション
Insert(pos,e)-要素eのコピーを反復器posが指す位置に挿入します.
erase(beg,end)-【beg,end】区間内のすべての要素を除去
clear()-すべての要素を除去
5.反復器
STLコンテナ内の要素のすべてまたは一部を巡回できるオブジェクト
コンテナ内の特定の位置を指定します.
6.コンテナ:
学習によりvector、map/multimap、set/multiset
アルゴリズムの問題のほんの一部を勉強したことも知っていますが、ここでは詳しくまとめません.