>> C++入門トップに戻る

コンテナ【list】

今回はコンテナのlistについて説明します。
基本はvectorと使い方は一緒ですが、いくつか関数が増えています。
また、添字によるアクセスができなくなっていますので注意して下さい。
listコンテナを使うにはlistヘッダをインクルードする必要があります。
まず下記のコードを見てください。

#include <list>

using namespace std;

void func(list<int>::iterator begin,list<int>::iterator end){

	for(;begin!=end;++begin){
		printf("%d,",*begin);
	}

	//改行
	printf("\n");
}

int main(void)
{
	//listのコンテナ宣言
	list<int> test,test2;

	//listのイテレーターを宣言
	list<int>::iterator begin,end;

	//ループさせて要素を10個追加
	for(int i=0;i<10;++i){
		test.push_back(i);
	}

	//表示
	func(test.begin(),test.end());

	//先頭要素を削除。
	test.pop_front();

	//表示
	func(test.begin(),test.end());

	//先頭に5を追加。
	test.push_front(5);

	//表示
	func(test.begin(),test.end());

	//5の数字が付く要素を全削除
	test.remove(5);

	//表示
	func(test.begin(),test.end());

	//値を先頭に追加
	test.push_front(25);
	test.push_front(30);
	//表示
	func(test.begin(),test.end());

	test.sort();
	
	//表示
	func(test.begin(),test.end());

	//もう一つのコンテナ作成
	test2.push_back(50);
	test2.push_back(100);

	//二つのコンテナを結合
	test.merge(test2);

	//表示
	func(test.begin(),test.end());

	//逆ソート
	test.sort(greater<int>());

	//表示
	func(test.begin(),test.end());
	
	return 0;
}

これを実行するとこうなります。

宣言方法等は、vectorの時と一緒なので省略します。
増えた関数についてだけ解説します。

・push_front,pop_front関数
→先頭に要素の追加、削除を行う

・remove関数
→指定した値を持つ要素を全て削除

・sort関数
→コンテナ内の要素を昇順にソート
→降順にソートするには、sort関数の引数に【greater<コンテナの型>()】を指定する。

・merge関数
→コンテナ同士を結合させる。
→第一引数と第二引数にそれぞれ結合したいコンテナを指定するが、
第一引数のコンテナが結合後のコンテナになる。
→結合前にあらかじめソートしておく必要がある。


上記の関数の解説の通りです。
大きな違いとして、先頭要素の追加削除ができるようになったこと、
ソート、結合ができるようになったという点があげられます。
vectorで使った関数も同じように実装されています。(一部使えないかもしれませんが)

次回は、dequeについて説明します。


>> 【コンテナ【deque】】に進む
>> C++入門トップに戻る