C ++ STL_1コンテナの概要

容器

シーケンスコンテナ

それらの配列順序と入力順一貫した、一般STLシーケンスコンテナに使用される三つがあります:vectordequelist;

ベクター

ランダムアクセスを可能にする、すなわち直接任意の要素のインデックスにアクセスするが、ヘッドの中央でより多くの時間がかかりアクセスと、高尾利点に追加の要素又は除去要素効率であることができる、など。

#include<iostream>
#include<vector>//头文件
using namespace std;
int main()
{
	vector<int> arry;//空容器
	for(int i = 0;i <= 6;i ++)
		arry.push_back(i);
	for(int i = 0;i < arry.size();i++)
		cout<< arry[i]<<" ";
	return 0;
}

前記size()機能コンセンサス容器の配列が、
することができ[ ]、指定されたインデックスに2つの要素をアクセスします。

彼の利点であるが、不十分な要素はの中央に挿入され、いわゆる双方向キュー、尾部及び要素の高効率挿入ヘッド、等、を達成するために時間がかかります。

#include<iostream>
#include<deque>//头文件
using namespace std;
int main()
{
	deque<int> arry;//空容器
	for(int i = 0;i <= 6;i ++){
		arry.push_back(i);
		arry.push_front(i);
	}
	for(int i = 0;i < arry.size();i++)
		cout<< arry[i]<<" ";
	return 0;
}

前記push_front()キュー要素の頭部を挿入します。

リスト

それは二重リストをリンクされている、任意の位置での実装高効率の挿入や削除の利点の嘘は、不利な点は、ランダムアクセスではありません。

#include<iostream>
#include<list>//头文件
using namespace std;
int main()
{
	list<int> arry;//空容器
	for(int i = 0;i <= 6;i ++)
		arry.push_back(i);
	while(!arry.empty()){
		cout<< arry.front()<<" ";//输出第一个元素但不执行删除操作
		arry.pop_front();//删除第一个元素但不返回被删除的元素
	}
	return 0;
}

連想コンテナ

連想コンテナは、一般的に、親ノードと右のノードの値が大きい値よりも小さい左サブツリーの親ノードの値より、二分木によって実現されます。共通:setmultisetmapmultimap4つのコンテナ。

セットする

set自動選別の内部要素の値は、各要素は一度だけ、繰り返すことができない現れることができます。

マルチセット

multisetそしてset好きですが、重複する値を許可します。
以下のような達成するために:

#include<iostream>
#include<set>
using namespace std;
int main()
{	
	typedef set<int> intset;//缺省排列,默认operaotr<规则
	intset arry;
	arry.insert(1);
	arry.insert(2);
	arry.insert(3);
	arry.insert(4);
	arry.insert(5);
	intset::const_iterator pos;
	for(pos = arry.begin();pos != end.();++pos)
		cout << *pos << " " ;
	return 0;
}

すべてのコンテナが関連付けられているinsert挿入要素を提供する機能。

しかし、私はまた、強調したいinsert機能を、容器内の他の用途:

  1. 指定された位置には、要素の値valを「挿入」、およびイテレータ要素へのポインタを返す前に、
    iterator insert( iterator it, const TYPE &val );
  2. 値valとその「挿入」をnum要素の前に指定された位置
    void insert( iterator it, size_type num, const TYPE &val );
  3. すべての要素の間隔[開始、終了)「に」その前の指定された位置。
    void insert( iterator it, input_iterator start, input_iterator end );
地図

map要素は数字のペアの形、すなわち、で存在している(key,value)キーインに応じて、各要素keyソートされ、一度だけ、各キー。

マルチマップ

multimapそして、map似ていますが、重複キーを許可します。
以下のような達成するために:

#include<iostream>
#include<map>
using namespace std;
int main()
{	
	typedef map<int,int> intmap;//缺省排列,默认operaotr<规则
	intmaparry;
	arry.insert(make_pair(1,1));
	arry.insert(make_pair(4,6));
	arry.insert(make_pair(2,4));
	arry.insert(make_pair(7,1));
	arry.insert(make_pair(6,9));
	intmap::const_iterator pos;
	for(pos = arry.begin();pos != end.();++pos)
		cout << pos->second << " " ;
	return 0;
}

前記make_pair関数は、生成された(key,value)要素を、
ポインタの内容を前記firstポインティング・キーは、second格納された値を指します。

もちろんmap容器は、上記の形態に加えて、そこに直接割り当てであるか、または元素形態を生成する、マップすることができるoperaator[ ]:下付き文字キーであり、割り当ての値は、などとも呼ばれる連想配列を、記憶されています

#include<iostream>
#include<map>
using namespace std;
int main()
{	
	typedef map<int,int> intmap;//缺省排列,默认operaotr<规则
	intmaparry;
	arry[1] = 3;
	arry[3] = 1;
	arry[6] = 7;
	intmap::const_iterator pos;
	for(pos = arry.begin();pos != end.();++pos)
		cout << pos->second << " " ;
	return 0;
}

上記のフォームを使用して、私たちのように、我々は値を挿入するとことを言及する価値があるarry[10] = 1が、mapコンテナではありませんarry[10]。この時点では、すなわち、容器に追加された新しい要素を生成しますarry[10] = 1mulltimap彼は多くの場合になりますので、容量は、使用することはできませんすなわちインデックス、格納された複数の値に対応します。


コンテナアダプタ

stackqueuepriority_queue
ここでstack容器は、次のLIFO元の値、即ち、LIFO(スタック)。
queue通常のキュー、続くFIFOFIFO元の値を。
priority_queueプライオリティキューは、優先度などのランキング基準要素によって決定されるoperator<、すなわち昇順に基準に、優先順位を与えることができます。


イテレータ

イテレータが横断されSTL、すべての要素をオブジェクトコンテナを、あなたは、同等の、存在する任意の位置を指し示すことができc language、その後、STLに、私たちは見ることができないポインタのイテレータ、ポインタとメモリがバインドポインタの、しかし、およびイテレータは、コンテナエレメント結合され、その後、削除、イテレータはその再割り当てする前に、無効となり、このイテレータもはやアクセスをすることができます。

イテレータは、次の2つのカテゴリに分かれて:
**双方向イテレータ:**双方向イテレータは、双方向にすることができる持っているlistsetmultimapmapmultisetイテレータは、あります。
ランダムアクセスイテレータ**:**ランダムアクセスすることがあります。

一般的操作次のイテレータで使用されるがあります
operator *:現在の要素の位置の値を返し、
operator ++:イテレータ移動後方、
operator == and operator !=同じ場所に反復子点を分析するステップと
operator=:反復子が割り当てられ、すなわち彼の位置を与えるためにポイント、道路標識?

さらに、いくつかの機能を持つ反復子
begin():コンテナの開始点;
end():容器のエンドポイント、すなわち、最後の要素の次の位置、
コンテナは、前述に加えて、空であるかどうかを決定するempty(),size()、あるbegin() == end()等しいです空にします。

イテレータは、2つのタイプ有する任意の容器:
container::iterator読み書きモード、コンテナ内の要素の値を変更することができ、
container::const_iterator読み取り専用モードでは、要素の値は、コンテナを変更することができません。

私たちは、イテレータループ、事前インクリメント一般的に使用する場合にも、その点に注意してください++pos背面にも、学生が知っておくべき経験や形状をプログラミング++、Cのこの事を余分に一時オブジェクトを必要とするので、それが達成されるの

container operarot++ (int)(){
	container a(this);
	++this;
	return a;
}

あなたが扱っている場合はvectordequeそれが増加またはアカウントの問題を考慮して、ループ内の要素を削除することができるときとき、イテレータは無効にされてもよいです。
また、そこにあるreverse_iteratorことが多い中で、逆イテレータであることrbegin()、およびrend()使用と。

公開された222元の記事 ウォン称賛48 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_44116998/article/details/104564353