C ++ | STLリストコンテナトーキング

ディレクトリ

A.簡単なリストコンテナ

コンテナを作成する2つの方法の.list

三の.LISTコンテナの挿入および削除操作

IV。リスト上のコンテナのイテレータを使用します


A.簡単なリストコンテナ

 リストは、それが低レベルの双方向循環リストであることを意味し、二重にリンクされたリストの容器です。ヘッダファイルは、#include <リスト>であります

リストは二重にリンクされたリストのコンテナですので、我々は、ポインタを使用することはできませんので、その連続した論理アドレス、物理アドレスではなく連続的でないこと、二重にリンクされたリストの要素にアクセスするために直接ジャンプします。例えば、上記の図では、二重リンクリストの最初のノードを指すARRポインタは、我々は二重リンクリストにアクセスする第2の要素は、それはまた、ある*(ARR + 2)このようにアクセスすることはできません我々はフォローアップイテレータアクセスリストコンテナの平均値は、イテレータを使用してアクセスすることはできません+私は、このように(イテレータ代わっイテレータは、私は0,1,2,3を= ..... n)を。

コンテナを作成する2つの方法の.list

#include<iostream>
#include<vector>
#include<list>
#include<functional>

int main()
{
	std::list<int> lst1;
	std::list<int> lst2(10);//count
	std::list<int> lst3(10, 20);//count, value
	std::list<int> lst4(lst3.begin(), lst3.end());

	return 0;
}

建設とは何もしなかった一方で、コンテナリストLST1を構築するクラスの一覧を呼び出すにはデフォルトコンストラクタは、(すべてのコンテナは、デフォルトコンストラクタを持っている)です。

コンテナLST2リストを構築する際に、我々は、明示的にコンテナ10、10の初期サイズを与えられ、これらのデータのサイズが0に設定されています。

コンテナリストlst3を構築するには、我々は、明示的に20に容器10の初期サイズ、およびサイズ10のこれらの明示的なデータセットを与えられました。すなわち、我々はlst3内のデータ値20に10を挿入します。

容器lst4リストを構築する際に、我々は、パラメータがイテレータ範囲でlst4にデータlst3に挿入されている着信今後lst3、開始および終了後の位置で通過します。

三の.LISTコンテナの挿入および削除操作

#include<iostream>
#include<vector>
#include<list>
#include<functional>

template<typename Iterator>
void Show(Iterator first, Iterator last)
{
	for (first; first != last; first++)
	{
		std::cout << *first << " ";
	}
	std::cout << std::endl;
}

int main()
{
	std::list<int> lst1;


	for (int i = 0; i < 3; i++)
	{
		lst1.push_back(i + 1);
	}// 1 2 3
	for (int i = 0; i < 3; i++)//3 2 1 1 2 3
	{
		lst1.push_front(i + 1);
	}
	Show(lst1.begin(), lst1.end());

	lst1.insert(++lst1.begin(), 6);
	Show(lst1.begin(), lst1.end());

	lst1.pop_front();
	Show(lst1.begin(), lst1.end());

	lst1.pop_back();
	Show(lst1.begin(), lst1.end());

	lst1.erase(++lst1.begin(), --lst1.end());
	Show(lst1.begin(), lst1.end());

	return 0;
}

 

一backすなわち、要素のリストの最後に挿入された端部プラグ、O(1)の時間複雑

リストの先頭要素に挿入push_frontすなわち挿入ヘッド、O(1)の時間複雑

挿入する位置によって要素すなわち挿入、次の5つの機能を挿入し、過負荷O(1)の時間計算量を

  1. 反復子がはstd ::リスト<_Ty、_Alloc> ::挿入<_Iter、>(CONST const_iteratorの_Where、_Iter _First、_Iter _Last)、場所によって(ここ)(Iter_First〜Iter_Last)素子内部セクションに、セクションは、で表されますイテレータ範囲があります。
  2. イテレータははstd ::リストを<_Ty、_Allocを> ::(const_iteratorの_Where、size_type _COUNT、constの_Ty&_val)のインサートを、インサートはどこにこの要素位置の値のValをカウントします。
  3. 反復子は、この位置で要素のValの値を挿入する、(_Ty&_val CONST、const_iteratorの_Where)::リスト<_Ty、_Alloc> ::インサートはstd、この値はCONSTがそれを変更できない、ロック修正されます。
  4. 反復子は::この位置で要素のValの値を挿入するリスト<_Ty、_Alloc> ::インサート(const_iteratorの_Where、_Ty && _val)を、はstdが、この値は、ロックCONSTが変更されません。
  5. 反復子ははstd ::リスト<_Ty、_Alloc> ::インサート(const_iteratorの_Where、initializer_list <_Ty> _Ilist)、リスト内の初期化要素を使用する新たな位置を挿入するには、例えばします
     lst1.insert(lst1.begin(),{1,3,4});

     

そのヘッドは、削除する最初の要素のリスト、削除pop_front O(1)の時間計算量を

すなわち尾部は、後続の要素のリストを削除し、削除pop_back Oの時間複雑度(1)

即ち消去削除に応じた位置に、消去機能は、次の2つのオーバーロードしている、Oの時間複雑度(1)

  1. イテレータの消去(定数const_iteratorの_First、constのconst_iteratorの_Last)、イテレータの範囲のすべての要素を削除します。
  2.  イテレータ消去(定数const_iteratorの_Where)、この位置のremove要素。

アクセス、すなわち表示()関数Oの時間複雑度(N)

リストだからコンテナの利点は欠点があり、「迅速な挿入または欠失どこでも」ある「あまり効率的なアクセス。」

IV。リスト上のコンテナのイテレータを使用します

#include<iostream>
#include<vector>
#include<list>
#include<functional>

int main()
{
	int arr[] = { 1, 3, 214, 23, 5, 3 };
	int len = sizeof(arr) / sizeof(arr[0]);

	std::vector<int> vec(arr, arr + len);//内存连续   随机访问迭代器
	std::list<int> lst(vec.begin(), vec.end());//内存不连续	双向迭代器  ++ --	

	std::cout << vec[2] << std::endl;
	//std::cout << lst[1] << std::endl;

	std::vector<int>::iterator vit = vec.begin() + 2;
	std::cout << *vit << std::endl;

	//std::list<int>::iterator  lit = lst.begin() + 2;
        //std::cout << *lit << std::endl;

	return 0;
}

 

我々配列である根本的なコンテナベクトルを認識している私たちがすることはできませんので、我々はデータポインタにアクセスするために使用できるオフセットを加え、アドレスリストコンテナの物理アドレスが不連続であるので、その論理アドレスと物理アドレスは、連続していますデータにアクセスするためのオフセットを加えポインタ。私たちは、ベクトルコンテナイテレータは、ランダムアクセスイテレータ、コンテナとイテレータが双方向イテレータと呼ばれるリストとして知られています。

操作 - あなたは、コンテナを通過する場合ポピュラーに言えば、双方向イテレータは、+ Iまたは-i操作は、それが唯一の+またはことができることはできません。(Iは1,2,3 = .... N)

操作を - と、ランダムアクセスイテレータは、Iまたは-i +は、両方の操作が行わ++またはすることができます行います。(Iは1,2,3 = .... N)

公開された61元の記事 ウォン称賛26 ビュー5798

おすすめ

転載: blog.csdn.net/ThinPikachu/article/details/104906387