STL - STLの概要

・これは怠惰なものです

 

I.はじめに:

・STL:標準テンプレートライブラリ.Standardテンプレートライブラリ

・神の馬でSTL?

ペア
のベクトル、スタック、キュー、デック
PRIORITY_QUEUE
地図、SET
アルゴリズム
CMPとオペレータのオーバーロード


 二、ペア

#<ユーティリティ>・含ん
・二つの要素は、第1および第2があります。
第二よりも第1、さらによりも、最初の大きさを比較することができます。

書式#include <cstdioを> 
する#include <ユーティリティ> 

std名前空間を使用しました。

INTメイン(){ 
	対<整数、整数> _pair1、_pair2。
	_pair1.first = 1、_pair1.second = 2。
	_pair2.first = 2、_pair2.second = 2。
	printf( "%d個の\ n"、_pair1 <_pair2)。
	0を返します。
}

三、ベクトル

・#ザには、<ベクトル>
・ダイナミックアレイ
*のSTLのベクトルの実装。
ベクターは、他のデータ構造のSTLの基礎である。
・共通インタフェース:
一back();
[];
空()、サイズ()、クリア() 。

書式#include <cstdioを> 
する#include <ベクトル> 

std名前空間を使用しました。

INTメイン(){ 
	ベクトル<整数> VEC。
	
	vec.push_back(1)。
	vec.push_back(2)。
	vec.push_back(3)。
	printf( "%D%D%D \ n"は、VEC [0]、VEC [1]、VEC [2])。
	printf( "サイズ=%Dを\ n"、vec.size())。
	
	vec.clear(); 
	printf( "サイズ=%Dを\ n"、vec.size())。
	0を返します。
}

開始・STLデータ構造()と終了()は
、ほとんどのSTL実装の内部データ構造ベクター。有し
可変長配列、STLの代わりにアドレスを開始しているので()を終了()保存した。
開始()を示しますデータ構造のSTL開始アドレス。
エンド()STLの末尾のアドレスを示す。
STLが見つからない場合、一般的なSTLデータ構造は、()関数を見つける有する)(端を返します。


 四、スタック

含める#* <スタック>
・スタック。
*共通インタフェース:
トップ();
プッシュ();
POP();
空の()、サイズ();
明確な()。

書式#include <cstdioを> 
する#include <スタック> 

std名前空間を使用しました。

INTメイン(){ 
	スタック<整数> S。
	
	(!s.empty())s.pop()しばらく; //明らか

	s.push(1); 
	s.push(2)。
	s.push(3)。
	printf( "%d個の\ n"、s.top())。
	s.pop(); 
	printf( "%d個の\ n"、s.top())。
	0を返します。
}

 五、キュー

含める#* <キュー>
*キュー。
*共通インタフェース:
フロント()、バック();
プッシュ();
POP();
空の()、サイズ();
明確な()。

書式#include <cstdioを> 
する#include <スタック> 

std名前空間を使用しました。

INTメイン(){ 
	スタック<整数> S。
	
	(!s.empty())s.pop()しばらく; //明らか

	s.push(1); 
	s.push(2)。
	s.push(3)。
	printf( "%d個の\ n"、s.top())。
	s.pop(); 
	printf( "%d個の\ n"、s.top())。
	0を返します。
}

 六、および

・#<デック>含ま
・デック。
*共通インタフェース:
フロント()、バック();
一back()、push_front();
pop_back()、pop_front();
空の()、サイズ()、クリア() 。

書式#include <cstdioを> 
する#include <両端キュー> 

std名前空間を使用しました。

INTメイン(){ 
	両端キュー<整数> D。
	
	d.clear(); 
	
	d.push_back(1)。
	d.push_back(2)。
	d.push_back(3)。
	printf( "%d個の\ n"、d.front())。
	printf( "%d個の\ n"、d.back())。
	
	d.pop_back(); 
	printf( "%d個の\ n"、d.front())。
	printf( "%d個の\ n"、d.back())。
	
	d.push_front(100)。
	d.push_front(200)。
	d.push_front(300)。
	printf( "%d個の\ n"、d.front())。
	printf( "%d個の\ n"、d.back())。
	
	d.pop_front(); 
	printf( "%d個の\ n"、d.front())。
	printf( "%d個の\ n"、d.back())。
	
	0を返します。
}

七、ビットセット

含める#* <ビットセット>
・バイナリ配列、のみ0または1を割り当てられた各位置
*共通インタフェース:
[]
より良い出力COUTとビットセットを。

書式#include <cstdioを> 
する#include <iostreamの> 
の#include <ビットセット> 

std名前空間を使用しました。

INTメイン(){ 
	ビット集合<5> B。
	
	B [1] = 1。
	B [2] = 1。
	
	coutの<< B <<てendl; 
	
	0を返します。
}

八、PRIORITY_QUEUE

#* <キュー>含める
。・プライオリティキュー(スタック)この便利な
*共通インタフェース:
トップを();
プッシュ();
POP();
空の()、サイズ();
明確な()。

書式#include <cstdioを> 
する#include <キュー> 

std名前空間を使用しました。

INTメイン(){ 
	PRIORITY_QUEUE <整数> Q。//澶ф牴鍫?
	// PRIORITY_QUEUE <整数、ベクトル<整数>、大きな<整数>> Q。//灏忔牴鍫?
	
	(!q.empty())q.pop()しばらく; //明らか
	
	q.push(1); 
	printf( "%d個の\ n"、q.top())。
	q.push(2)。
	printf( "%d個の\ n"、q.top())。
	q.push(3)。
	printf( "%d個の\ n"、q.top())。
	q.push(4)。
	printf( "%d個の\ n"、q.top())。
	
	q.pop(); 
	printf( "%d個の\ n"、q.top())。
	
	0を返します。
}

ナイン、セット

#・<SET>含ま
・セット。
・共通インタフェース:
INSERT()、ERASE();
;()検索
空()、サイズ()、クリア()を。

書式#include <cstdioを> 
する#include <設定> 

名前空間stdを使用。

INTメイン(){ 
	セット<整数> S。
	
	s.clear(); 
	
	s.insert(1)。
	s.insert(100)。
	printf( "%d個の\ n"、s.find(10)== s.end())。

	s.insert(10)。
	printf( "%d個の\ n"、s.find(10)== s.end())。
	
	s.erase(10)。
	printf( "%d個の\ n"、s.find(10)== s.end())。
	
	0を返します。
}

テン、マルチセット  

・#ザ・は、<SET>含める
。-repeatableセット
・共通インタフェースを:
INSERT()、)(消去;
()、COUNT()検索;
空()、サイズ()、クリア()。
ここでは、消去、ということに注意してください)すべて同じものはすべて削除されます。

書式#include <cstdioを> 
する#include <設定> 

名前空間stdを使用。

INTメイン(){ 
	多重集合<整数> M。
	
	m.clear(); 
	
	m.insert(1)。
	m.insert(100)。
	printf( "%d個の\ n"、m.find(10)== m.end())。

	m.insert(10)。
	printf( "%d個の\ n"、m.find(10)== m.end())。
	
	m.insert(10)。
	printf( "%d個の\ n"、m.count(10))。
	
	m.erase(10)。
	printf( "%d個の\ n"、m.find(10)== m.end())。
	printf( "%d個の\ n"、m.count(10))。
	
	
	0を返します。
} 

 セブンイレブン、マップ

#* <地図>を含む
*マッピング。
・マップ要素は型の一対の内側にある。
-commonインターフェース:
INSERT()、ERASE();
(検索);
[];
空()、サイズ()、クリア() 。

書式#include <cstdioを> 
する#include <マップ> 

std名前空間を使用しました。

メインINT(){ 
	マップ<整数、整数> M。
	
	m.clear(); 
	
	m.insert(make_pair(1、1))。
	M [2] =。
	M [3] = 3; 
	
	printf( "%D%D \ n"、m.find(1)== m.end()、m.find(4)== m.end())。
	printf( "%D%D \ n"は、M [1]、M [2])。
	
	m.erase(1)。
	printf( "%d個の\ n"、m.find(1)== m.end())。
	0を返します。
}

十二、hash_map

・C ++がある。あなた自身のハッシュではなく、推奨hash_mapを書きたくないでください
。・標準STL hash_mapないので、上記のcplusplus.comに何がある。
・Linuxのhash_mapで内部__gnu_cxxされ、unordered_mapは、データ構造の内部++ 11はC 。これらの試験で2つの法律のデバッグ
100%が推奨されていない、本当にしたくない/ハッシュを手書きだろう、代わりにマップを使用してください。


サーティーン、イテレータ

•各STLデータ構造は、対応するイテレータが、中国はイテレータと呼ばれています。
例設定<整数>イテレータが設定されている。・<整数> ::イテレータ、イテレータの使用は、要素の内部データ構造へのアクセスを持つことである。
例えば、セットの場合、マルチセットと内部のマップは、私たちは小さなから、イテレータによってアクセス大に、できるソートされます。
・*自身が使用する内部要素にアクセスするためのポインタであるイテレータか- >。

#include <cstdioを> 
する#include <cstdlib> 
の#include <CTIME> 
の#include <設定> 

使用して名前空間std。

INTメイン(){ 
	srand関数(時間(0))。
	<整数>の設定。
	(1 = I int型、iは<= 10; ++ I){ 
		int型のx =ランド()%100000。
		IF(s.find(X)== s.end())s.insert(X)。
	} 
	
	のための(集合<整数> ::イテレータITER = s.begin();!ITER = s.end(); ITER ++){ 
		のprintf( "%dの"、* ITER)。
	} 
	プット( "")。
	
	セット<整数> ::イテレータlower_iter = s.lower_bound(10000); 
	セット<整数> ::イテレータupper_iter = s.upper_bound(10000); 
	
	printf( "%D%D \ n"、* lower_iter、* upper_iter)。
	
	0を返します。
}

十四、LOWER_BOUND()、上部_bound()

・セットについて、およびバイナリクエリにLOWER_BOUNDのUPPER_BOUNDを使用することができる
。そのような要素が存在しない場合・s.lower_bound(X)はエレメントxの最小点未満、イテレータを返し、ランダムな値が返される
・S.upper_bound (x)とs.lower_bound(x)は平均である、唯一の違いは、同じではありません。
・UPPER_BOUNDが未満を返しません!


フィフティーン、注意

*注:STLデータ構造がプレミアムであるので、我々は常に空にするかどうかを検討すべきで、それが簡単にREます。
・典型的な例RE:
ベクトルの境界添字アクセスを
。空のスタックアクセストップ(IS)
・住所クロスボーダーは必ずしもREませんが、それでも、プログラムの正常な動作に影響を与えます。


シックスティーン、アルゴリズム

。・STLアルゴリズムライブラリは、いくつかの比較的簡単なアルゴリズムがあるもあります
。シーケンスを命じた)ソート(
リバース()が反転配列;
random_shuffle()スクランブル;
()連続した配置next_permutationを生成するためには、
分()、maxが()、スワップ()と、2つのスイッチング素子の最大値と最小値をとります。

書式#include <cstdioを> 
する#include <アルゴリズム> 

std名前空間を使用しました。

INTのmain(){ 
	int型、X = 1、Y = 2。
	
	printf( "%d個の\ n"、分(X、Y))。
	printf( "%d個の\ n"、MAX(X、Y))。
	
	スワップ(X、Y)
	printf( "%D%D \ n"、x、y)は、
	
	INT [10]。
	[1] = 5。
	[2] = 6。
	[3] = 3; 
	[4] = 4。
	
	ソート(+ 1、A + 4 + 1)。//最後は+ 4 + 1でなければなりません!
	printf( "%D%D%D%D \ n"は、[1]、[2]、[3]、[4])。
	
	逆(+ 1、A + 4 + 1)。
	printf( "%D%D%D%D \ n"は、[1]、[2]、[3]、[4])。
	
	random_shuffle(A + 1、A + 4 + 1)。
	printf( "%D%D%D%D \ n"は、[1]、[2]、[3]、[4])。
	
	プット( "");
		printf( "%D%D%D \ n"は、[1]、[2]、[3])。
		next_permutation(A + 1、A + 3 + 1)。
	} 
	0を返します。
}

セブンティーン、ソート

・より多くの重要な機能のアルゴリズム分類である()。
・有用性が小さいから大規模なソートの順序である。
分類は()、簡単なクイックソートではなく、時間の複雑さはO(nlogn)Aである。
ソート()することができます配列またはベクターはなく、他のソートSTLデータ構造である。ソート
最初のパラメータの並べ替え()を配列の先頭であり、2番目のパラメータは配列の最後の位置である。
ソート()第三のパラメータが存在し、 CMP。


十八、逆

・これは、比較的簡単である配列を反転することである。
アレイの始まりであり、2番目のパラメータは、アレイの終了後の位置である引数と最初のパラメータとしてソートします。


十九、random_shuffle

・これは、動揺の配列の内容で、比較的簡単です。
・パラメータと同じ種類の、最初のパラメータは配列の先頭で、2番目のパラメータは、配列の終了後の位置です。


二十、next_permutation

・これは、比較的簡単であり、現在の構成(辞書式センス)を生成するように構成されている。
*パラメータと同じ種類は、最初のパラメータは、配列の先頭であり、2番目のパラメータは、アレイの終了後の位置である。
*もちろん、そこ(辞書式順序を意味する)、アレイ上の電流を生成するように構成された関数prev_permutation()、  


*注:

・インターフェイスでのSTLが行う方法を忘れてしまいましたか?
cplusplus.comを問い合わせることができます。

・簡単なデータでSTL(スタック、キュー)構造ので悪いチェックの、手書きをお勧めします。
・地図、達成することがより困難SETは、STLを示唆しました。

アルゴリズムにおけるSTL・パッケージ定数が比較的大きいため、カードは、このようなベクターとして、一定であってもよいです。

 

おすすめ

転載: www.cnblogs.com/konglingyi/p/11391131.html