C++ 学習 - 第 7 回 STL - 基礎

パート 7 STL-基礎

1. STL の最初の紹介

1.1 STLの誕生

画像-20220902221048514

1.2 STLの基本概念

画像-20220902221134122

1.3 STL の 6 つの主要コンポーネント

画像-20220902221329109

1.4 STL のコンテナ、アルゴリズム、イテレータ

画像-20220902221547479

画像-20220902221901324

1.5 コンテナアルゴリズム反復子の最初の紹介

画像-20220903220433828

1.5.1 ベクターストアの組み込みデータ型

画像-20220903220513415

#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>//标准算法的头文件

//vector容器存放内置数据类型

void myPrint(int val) {
	cout << val << endl;
}
void  test01() {
	//创建了一个vector容器,数组
	vector<int> v;

	//想容器中插入数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	v.push_back(50);

	//通过迭代器访问容器中的数据‘
	//vector<int>::iterator itBegin = v.begin();//起始迭代器   指向容器中第一个元素
	//vector<int>::iterator itEnd = v.end();//结束迭代器  指向容器中最后一个元素的下一个地址

	第一种遍历方式
	//while (itBegin != itEnd) {
	//	cout << *itBegin << endl;
	//	itBegin++;
	//}

	//第二种遍历方式
	/*for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << endl;
	}*/

	//第三种遍历方式  利用stl提供遍历算法
	for_each(v.begin(), v.end(), myPrint);//回调函数


}

int main() {
	test01();
}
1.5.2 ベクターはカスタム データ型を保存します

学習目標: カスタム データ型をベクターに保存して出力する

#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>//标准算法的头文件
#include <string>

class Person {
public:
	Person(string name, int age) {
		this->m_Name = name;
		this->m_Age = age;
	}
	string m_Name;
	int m_Age;
};

void test01() {
	vector<Person>v;

	Person p1("aaa", 11);
	Person p2("bbb", 22);
	Person p3("ccc", 33);
	Person p4("ddd", 44);
	Person p5("eee", 55);

	//添加数据
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	v.push_back(p5);

	//遍历容器中的数据
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout << "姓名:  " << (*it).m_Name << "年龄: " << (*it).m_Age << endl;
	}
}

void test02() {
	vector<Person*>v;

	Person p1("aaa", 11);
	Person p2("bbb", 22);
	Person p3("ccc", 33);
	Person p4("ddd", 44);
	Person p5("eee", 55);

	//添加数据
	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);
	v.push_back(&p5);

	//遍历容器中的数据
	for (vector<Person *>::iterator it = v.begin(); it != v.end(); it++) {
        Person * p = (*it)
		cout << "姓名:  " << p->m_Name << "年龄: " << p->m_Age << endl;
	}
}
int main() {
	//test01();
	test02();
}
1.5.3 ベクターコンテナのネストされたコンテナ

学習目標: コンテナ内でコンテナをネストし、すべてのデータを走査して出力します。

#include<iostream>
using namespace std;
#include <vector>

void test01() {
	vector <vector<int>>v;
	//创建小容器
	vector<int>v1;
	vector<int>v2;
	vector<int>v3;
	vector<int>v4;
	vector<int>v5;
	//向小容器添加数据
	for(int i = 0; i < 4; i++) {
		v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
	}

	//将小容器插入到大容器中
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	//通过大容器,把所有数据遍历一遍
	for (vector <vector <int>> ::iterator it = v.begin(); it != v.end(); it++) {
		// (*it)------容器  vector<int>
		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
		{
			cout << *vit << " ";
		}
		cout << endl;
	}
}

int main() {

	test01();
}

2. STL共通コンテナ

2.1 文字列コンテナ

2.1.1文字列の基本概念

画像-20221030213937104

2.1.2文字列コンストラクター

画像-20221030214802502

#include<iostream>
using namespace std;
#include <string>

//string 的构造
void test01() {
	string s1;//默认构造
	const char * str = "hello world";
	string s2(str);
	cout << "s2 = " << s2 << endl;

	string s3(s2);
	cout << "S3 = " << s3 << endl;
	string s4(10, s3);
	cout << "s4 = " << s4 << endl; 

}

int main() {
	test01();
}

要約: 文字列のさまざまな構築方法は比較できませんが、それらを簡単に使用するにはどうすればよいですか?

2.1.3 文字列代入操作

画像-20221030220632017

#include<iostream>
using namespace std;

//string赋值
void test01() {
	string str1;
	str1 = "hello world";
	cout << "str1 = " << str1 << endl;

	string str2;
	str2 = str1;

	string str3;
	str3 = "A";

	string str4;
	str4.assign("hell c++");
	cout << "str4 = " << str4 << endl;

	string str5;
	str5.assign("hello c++", 5);
	cout << "str5 = " << str5 << endl;

	string str6;
	str6.assign(str5);

	string str7;
	str7.assign(10,"w");

}

int main() {
	test01();

}

概要: 文字列値を割り当てる方法はたくさんありますが、operator= の方がより実用的です。

2.1.4string 文字列の連結

画像-20221101210127451

画像-20221101210837929

2.1.5文字列の検索と置換

画像-20221101211923701

画像-20221101213228039

2.1.6 文字列の比較

画像-20221104204746500

画像-20221104204834563

2.1.7 文字列文字アクセス

画像-20221104205000666

画像-20221104205113005

修正も同様に行えます

画像-20221104205207629

2.1.8文字列の挿入と削除*

画像-20221104205254720

画像-20221104205759889

str の挿入および削除の添字は 0 から始まります。

2.1.9文字列の部分文字列

画像-20221104210132284

2.2vector容器

2.2.1ベクトルの基本概念

画像-20221104210346981

画像-20221104210407911

2.2.2ベクターコンストラクター

画像-20221104210506203

画像-20221104211517965

画像-20221104211527943

画像-20221104211546778

画像-20221104211603959

ベクターのさまざまな構築方法は比較するものではなく、柔軟に使用してください

2.2.3ベクターコピー操作

画像-20221104211717163

画像-20221104212047501

画像-20221104212125789

2.2.4 vetcor の容量とサイズ

画像-20221104212157953

画像-20221104212527120

2.2.5 vetcor の挿入と削除

画像-20221104212610398

画像-20221104212856333

画像-20221104212834864

2.2.6 ベクトルデータアクセス

画像-20221104212931236

2.2.7 ベクトル交換コンテナ

画像-20221104213053625

画像-20221104213216717

実際の使用量 メモリを縮小する

画像-20221104213347070

2.2.8 ベクトル予約スペース

画像-20221104213506008

画像-20221104213718955

2.3 デックコンテナ

2.3.1 deque コンテナの基本概念

画像-20221106205645632

画像-20221106210409189

2.3.2 両端キューコンストラクター

画像-20221106210523672

画像-20221106210741035

画像-20221106210836929

2.3.3 デキュー代入操作

画像-20221106211006939

画像-20221106211106396

2.3.4 デキューサイズの操作

画像-20221106211345760

画像-20221106211524943

2.3.5 deque の挿入と削除

画像-20221106211722764

2.3.6 データアクセスのデキュー

画像-20221106212035235

2.3.7 デックソート

画像-20221106212122015

画像-20221106212305152

要約: ソート アルゴリズムは非常に実用的で、使用するときにヘッダー ファイル アルゴリズムを組み込むだけです。

2.4スタックコンテナ

2.4.1 スタックの基本概念

画像-20221106212437349

2.4.2 共通スタックインターフェイス

画像-20221106212604992

画像-20221106212844832

2.5キューコンテナ

2.5.1 キューの基本概念

画像-20221106212956194

2.5.2 キュー共通インターフェース

画像-20221106213057102

画像-20221106222655752

2.6 リストコンテナ

2.6.1 リストの基本概念

画像-20221106223152675

画像-20221106223410850

画像-20221106223446991

画像-20221106223132829

2.6.2 リストコンストラクタ

画像-20221107083140522

画像-20221107083335179

2.6.3 リストの割り当てと交換

画像-20221107083410447

2.6.4 リストサイズの操作

画像-20221107083637275

2.6.5 リストの挿入と削除

画像-20221107083829031

画像-20221107084200916

2.6.6 リストデータアクセス

画像-20221107084406386

画像-20221107084827538

2.7.7 リストの反転とソート

画像-20221107084906925

画像-20221107085207888

2.7.8 ケースの分類

画像-20221107085233382

画像-20221107085620044

画像-20221107085700245

画像-20221107085713865

2.7セット容器

2.7.1 セットの基本概念

画像-20221107151922463

2.7.2 セットコンテナの構造

画像-20221107152206020

画像-20221107152243596

2.7.3 サイズの設定と交換

画像-20221107152311173

2.7.4 セットの挿入と削除

画像-20221107154224695

画像-20221107154637982

2.7.5 セットの検索と統計

画像-20221107154719862

2.7.6 セットとマルチセットの違い

画像-20221107154904957

画像-20221107155707207

画像-20221107155734221

要約:

重複データの挿入が許可されていない場合は、set を使用できます。

重複したデータを挿入する必要がある場合は、マルチセットを使用してください

2.7.7 ペアの作成

画像-20221107160316031

画像-20221107160650956

2.7.8 セットコンテナの仕分け

画像-20221107160742746

ストア組み込み関数

画像-20221107160947406

画像-20221107161046043

カスタム関数を保存する

タイプを定義する

画像-20221107161506591

組み込み関数を変更する

画像-20221107161542236

インスタンス化するときに使用されます

画像-20221107161616066

要約:

カスタム データ型の場合、set はデータを挿入する前に照合順序を指定する必要があります。

2.8 マップコンテナ

2.8.1 マップの基本概念

画像-20221107161719294

2.8.2 マップの構築と割り当て

画像-20221107162931163

画像-20221107163606825

画像-20221107163547290

概要: マップ内のすべての要素はペアで表示されます。データを挿入するときはペアを使用します。

2.8.3 マップのサイズとスワッピング

画像-20221107164219864

2.8.4 マップの挿入と削除

画像-20221107164314292

画像-20221107164448614

4 番目の方法の使用は推奨されません。キーを使用して値にアクセスできます。

画像-20221107164608412

2.8.5 地図の統計と検索

画像-20221107164657026

2.8.6 マップコンテナのソート

画像-20221107164743306

画像-20221107164833611

ファンクタ

画像-20221107164900903

画像-20221107164921988

2.9 ケースと従業員のグループ化

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-4JdS95jz-1667824623562) (C:/Users/62476/AppData/Roaming/Typora/) typora-user-images/image-20221107165840580.png)]

画像-20221107165906843

3 stl 関数オブジェクト

3.1 機能形成

3.1.1 関数オブジェクトの概念

画像-20221107195622425

3.1.2 関数オブジェクトの使用法

画像-20221107195925759

画像-20221107200849040

画像-20221107201033049

画像-20221107201058846

3.2 述語

3.2.1 述語の概念

画像-20221107201246090

単項述語

画像-20221107201622400

画像-20221107201641190

バイナリ述語

画像-20221107201816233

画像-20221107201958789

3.3 組み込み関数オブジェクト

3.3.1 裏切り者機能オブジェクトの意味

画像-20221107202820491

3.3.2 算術関手

画像-20221107202913251

画像-20221107203005403

3.3.3 関係関数子

画像-20221107203053039

画像-20221107203203573

3.3.4 論理関数

画像-20221107203342177

画像-20221107203510846

おすすめ

転載: blog.csdn.net/charles_zhang_/article/details/127738791