アフィリエイト広告を利用しています

広告

posted by fanblog

2018年02月12日

《その289》 双方向リスト list<>


 双方向リスト list<>

 C++ が提供するコンテナライブラリから、
今回は、list<> について、ごく簡単にですが、チェックしてみます。

 list<> では、1つのノードが1つのデータを格納し、各ノードは、それぞれ自身の前後のノードへのポインタを保持しています。
本ブログの《277》などにも出てきた線形リスト構造に似ています(《277》のノードは後方のノードへのポインタしか持っていませんでした)。

 list の操作性やメンバ関数は、vector に似ています。
ただし、list には添字演算子 [] が用意されていないなど、異なる点も多くあります。

 下記のプログラムを順にみていきます。

最初に、
  list a{ 15, 16, 17, 18 };
として、いきなり { 15, 16, 17, 18 } を要素にもつ list オブジェクト a を生成します。

次に、先頭側から、
  push_front関数
で値を挿入し、続いて末尾に、
  push_back関数
で値を挿入しています。

コピーコンストラクタで listオブジェクト b を生成します。
  list b(a);

b の先頭を指すイテレータ it を取得します。
  list::iterator it = b.begin();

it++ を 6 回繰り返して、イテレータ it を 6 進めます。
 その後、その it が指す位置に 14 を挿入しています。
  b.insert(it, 14);

b の要素を昇順にソートします。
  b.sort();

a の先頭要素を削除します。
  a.pop_front();

最後に、a, b の要素を交換しています。
 a.swap(b);

 以下はプログラムです。

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

void disp(list<int>& x) {
list<int>::iterator it = x.begin();
for (unsigned i = 0; i < x.size(); i++) {
cout << *it << ' '; it++;
}
cout << '\n';
}

int main() {
cout << "list<int> a{ 15, 16, 17, 18 };\n";
list<int> a{ 15, 16, 17, 18 };
cout << "a … "; disp(a);
cout << '\n';

cout << "先頭に、13, 12, 11 の順に値を挿入\n";
for (unsigned i = 13; i > 10; i--)
a.push_front(i);
cout << "a … "; disp(a);
cout << '\n';

cout << "末尾に 19 を挿入\n";
a.push_back(19);
cout << "a … "; disp(a);
cout << '\n';

cout << "list<int> b(a);\n";
list<int> b(a);
cout << "b … "; disp(b);
cout << '\n';

cout << "b の先頭を指すイテレータ it を取得し、\n"
" そのイテレータ it を 6 進めます。\n"
" 次に、it が指す位置に 14 を挿入。\n";
list<int>::iterator it = b.begin();
for (unsigned i = 0; i < 6; i++)
it++;
b.insert(it, 14);
cout << "b … "; disp(b);
cout << '\n';

cout << "b.sort();\n";
b.sort();
cout << "b … "; disp(b);
cout << '\n';

cout << "a の先頭要素を 6回削除します。\n";
for (unsigned i = 0; i < 6; i++)
a.pop_front();
cout << "a … "; disp(a);
cout << '\n';

cout << "a.swap(b);\n";
a.swap(b);
cout << "a … "; disp(a);
cout << "b … "; disp(b);
}

f10_0008.png



この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7309490
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。