1. STL の最初の紹介
1.STLの誕生
-再利用可能
- オブジェクト指向および汎用プログラミングの再利用性の向上
- データ構造とアルゴリズムの一連の標準を確立し、STL を誕生させました。
2. STLの基本概念
-STL(標準テンプレートライブラリ、標準テンプレートライブラリ)
-STL 一般分類: コンテナ アルゴリズム イテレータ
- コンテナとアルゴリズムはイテレータを介してシームレスに接続されます
-STL のほぼすべての燃料供給コードはテンプレート クラスまたはテンプレート関数を使用します
3.STL 6 つのコンポーネント
STL は、コンテナ、アルゴリズム、イテレータ、ファンクタ、アダプタ、スペース コンフィギュレータの 6 つの主要コンポーネントに大別されます。
-1. コンテナ: ベクター、リスト、デック、セット、マップなどのさまざまなデータ構造
-2. アルゴリズム: ソート、検索、コピー、for_each などの一般的に使用されるさまざまなアルゴリズム
-3. イテレータ: コンテナとアルゴリズムの間の接着剤の役割を果たします。
-4. ファンクター: 関数のように動作し、アルゴリズムの戦略として使用できます。
-5. アダプター: コンテナー、ファンクター、またはイテレーターのインターフェースを変更するために使用されるもの
-6. スペースコンフィギュレーター: スペースの構成と管理を担当します。
4. STL のコンテナ、アルゴリズム、イテレータ
・コンテナ:物を保管する場所。
シーケンシャル コンテナ: 順序付けを重視し、シーケンシャル コンテナ内の各要素の位置は固定されています。
連想コンテナ: バイナリ ツリー構造。要素間に厳密な物理的順序関係はありません。
- アルゴリズム: 問題の解決策
論理的または数学的問題を解決するには、限られた手順が使用されます。この主題はアルゴリズムと呼ばれます。
アルゴリズムは、質的変化アルゴリズムと非質的変化アルゴリズムに分けられます。
質的変更アルゴリズム: コピー、ジャカード、削除などの間隔要素を変更します。
非定性アルゴリズム。検索、カウント、トラバース、極値の検出など、間隔要素を変更しません。
イテレータ: コンテナとアルゴリズムの間の接着剤
コンテナの内部表現を公開せずに、コンテナに含まれる要素に順次アクセスするメソッドを提供します。
各コンテナには独自のイテレータがあります
イテレータの使い方はポインタと非常に似ており、初心者の段階では、まずイテレータがポインタであることを理解できます。
2. STL の最初の紹介
ベクター
1.vector は組み込みのデータ型を格納します
-容器vector
-それぞれのアルゴリズム
-反復子ベクトル<int>::itrator
作成する
ベクトル<int> v;
コンテナにデータを挿入する
v.push_back();
イテレータを介してコンテナ内のデータにアクセスする
Vector<int>::iterator itBegin=v.begin();
Vector<int>::iterator itEnd=v.end();
位置に注意してください終了
最初のトラバースメソッド
while(itBegin!=itEnd)
{
cout<<*itBegin<<endl;
それ開始++;
}
2 番目のトラバース メソッド
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<endl;
}
3番目の種類
void myPrint(int val)
{
cout<<val<<endl;
}
for_each(v.begin(),v.end(),myPrint);
2.vector はカスタム データ型を格納します
クラス人{
公共:
人物(文字列名、整数の年齢)
{
this->mName=名前;
this->mAge=年齢;
}
公共:
文字列 mName;
整数の年齢;
};
ベクトル<人> v;
人 xx('a',1);
v.push_back(xx);
void myPrint(個人値)
{
cout<<val.mName<<endl;
cout<<val.mAge<<endl;
}
for_each(v.begin(),v.end(),myPrint);
注: これは値の転送であるため、アドレス転送を変更する必要があります
3. コンテナーのネストされたコンテナー
2次元配列に似ています
ベクトル<ベクトル<int>> v;
for(vector<vector<int>>::iterator it=v.begin();it!=v.end();it++)
{
for(vector<int>::iterator vit=(*it).begin();vit!=(*it).end();vit++ )
{
cout<<*vit;
}
}
弦
1.エッセンス
string は C の char* です
C++ではクラスです
文字列にカプセル化されたメソッドが多数あります
検索、コピー、削除、置換、挿入
-string はメモリ割り当てを内部で管理します
2.コンストラクター
文字列 s1;
const char*str="ハローワールド";
文字列 s2(str)
文字列 s3(s2);
文字列 s4(10,'a');
3. 代入操作
// 演算子はオペランド、つまり変更される数値です
str='a';
//文字列 s を別の str に代入します
str.assign(s);
// s の最初の n ビットを str に代入します
str.assign(s,n)
4.string文字列連結
a+=b;
s の最初の n 項目を s の後に連結します。
a.append(s,n);
s の位置から始まる n 文字を s の終わりまで接続します
a.append(s,pos,n);
5.文字列の検索と置換
str.find(s,pos);
str の最初の n 位置で、pos から始まる s を検索します。
str.find(s,pos,n);
str では、pos から開始して最後に出現する s を見つけます。
str.rfind(s,pos)
str の最初の n 個の位置で、pos から開始して s が最後に出現した位置を見つけます。
str.rfind(s,pos,n);
6.string文字列の比較
str.compare()
7.string 文字列アクセス
str[0]=1;
str.at(1)='1';
8.string文字列の挿入と削除
str.insert(pos,s);
str.insert(pos,n,s);
str.erase(pos,n);
9. 文字列部分文字列の取得
str.substr(pos,n);
ベクター
1.建設
-1 関数: ベクトルは配列に非常に似ており、シングルエンド配列にもなります。
-2 違い: 配列は静的ですが、ベクトルは動的に展開できます。
- 動的拡張: 継続ではなく、新しいアドレスを検索してコピーします。
2. 課題
str.assign(beg,end);
(beg, end) 間隔のデータをそれ自体にコピーします
3. 容量とサイズ
str.empty()
str.capacity();
str.size();
str.resize(int num);
str.resize(int num,elem);
4. 挿入と削除
str.push_back()
str.pop_back()
str.insert(pos,count,ele)
str.erase(pos)
str.erase(開始,終了)
クリア();
5.データアクセス
str.at();
str[];
str.font()
str.back()
6. 交換可能な容器
str.swap(アイテム);
7. スペースを確保する
str.reserve(len);
したがって
両端配列
1.建設
deque<T> deq;
deq.deque();
2. 課題
deq= deq1;
deq.assign(beg,end);
deq.assign(n,elem);
3. サイズ操作
ベクトル
4. 挿入と削除
ベクトル
5.データアクセス
6. ソート操作
deq.sort(deq.begin(),deq.end());
スタック
1. 基本的な考え方
スタックは先入れ後出しコンテナです
2. 共通インターフェース
列
1. 基本的な考え方
先入れ先出しのキューに入れる
2. 共通インターフェース
リスト
1. 基本的な考え方
リンク リストは、不連続な物理ストレージ ユニットを備えたストレージ構造であり、データ要素の論理的順序は、リンク リスト内のポインタ リンクによって実装されます。
リンク リスト: リンク リストは一連のノードで構成されます
ノードの構成: 1 つは要素を格納するデータ フィールド、もう 1 つは次のノードのアドレスを格納するポインタ フィールドです。
2.コンストラクター
リスト<T> リスト;
リスト(先頭、末尾);
リスト(n,elem);
list(const list &lst);
3.譲渡と交換
lst.assign();
lst.swap();
4. サイズ操作
5. 挿入と削除
6.データアクセス
7. 逆順に並べ替える
8. ケースの仕分け
セット/マルチセット
1. 基本概念、構築、割り当て
-すべての要素は挿入時に並べ替えられます
-連想コンテナ、最下層はバイナリツリー構造
-set は要素の重複を許可しません
-multiset はコンテナ内の重複要素を許可します
set<T> st;
set(セット&st);
2. サイズと交換
3. 挿入と削除
4. 検索と統計
5.セットとマルチセットの違い
6. 並べ替えルール
セットされたコンテナはデフォルトで大きい順にソートされますが、ファンクターを使用してソート規則を変更できます。
7. カスタムクラスの並べ替えルール
公的人
{
}
公開比較人
{
bool 演算子()(const 人,const 人)
{
p1.m_Age>p2_Age を返します。
}
}
set<人物,比較人物> セット
for(set<人,比較する人>::イテレータ it =s.begin();it!=s.end():it++)
{
cout<<"姓名:"<<it->m_Name<<"年龄:"<<it->m_Age<<endl;
}
ペア
1.グループの作成
地図
1. 基本概念、構築、割り当て
-導入
マップ内のすべての要素はペアです
ペアの最初の要素はインデックスとして機能するキー (キー値) で、2 番目の要素は値 (実際の値) です。
すべての要素は要素のキー値に基づいて自動的に並べ替えられます。
-自然
マップは連想コンテナであり、その基礎となる構造はバイナリ ツリーです。
-アドバンテージ
価値をすぐに見つけられる
マップ<T1,T2> mp;
マップ(constマップ&マップ);
マップ= ;
2. サイズと交換
mp.size();
mp.空。
mp.swap(st);
3. 挿入と削除
mp.insert()
mp.clear()
mp.erase(pos)
mp.erase(beg,end)
mp.erase(キー)
4. 検索と統計
mp.find(キー);
mp.count(キー);
5. 並べ替え
ファンクターを使用して元の昇順を降順に変更します。
クラスMyCompare
{
公共:
bool 演算子()(int v1,int v2)
{
v1>v2 を返します。
}
}