12:タスク処理を実装する(2)

 C++を使っている人に朗報です。C言語アルゴリズムの教科書と格闘しながら自力で双方向リストを開発する必要はありません!

 C++を扱う開発ソフトには、普段からよく利用されるアルゴリズムをクラス化したプログラム――STL(スタンダード・クラス・ライブラリ)――を標準でサポートするよう、ANSIやISOの規格団体によって定められています。このアルゴリズムの中にはリストアルゴリズムも含まれていますので、これを利用しない手はありません。STLについて完全に解説しようとすると、A4サイズ350ページ分の書籍ができあがってしまうくらいのボリュームになってしまうので、細かいところは専門書に任せるとして、ここでは「リスト」に焦点を絞って解説していきます。
まずはリストアルゴリズムをサポートしたヘッダファイルをインクルードします。  ヘッダファイルなのに「.h」がないことに違和感を覚えるかもしれませんが、C++専用の標準ヘッダファイルには「.h」をつけないのが慣例となっていますし、Visual Studioでは.hをつけるとコンパイル時にエラーになります。
 STLは、STL以外で用いられる宣言との混同を避けるため、「std::list」のように、「std」という通常の宣言と区別するための名称が付け加えられています。普通ならことあるごとに「std::~」と記述しなくてはなりませんが、少し面倒です。そこで、次の一行を加え、「特に問題がないときは、必要に応じて『std::』を付け加えてください」という宣言を行うことで、ひとつひとつの変数や関数に「std」を記述する手間を省くことにしましょう。  STLでサポートされるアルゴリズムは「テンプレート」という概念によって、様々な形式のデータを柔軟に扱うことができます。listに続いて「<>」を記述し、そこにデータ型を挿入すると、そのデータ型を格納するためのリスト基盤が完成します。  リストはそのアルゴリズムの特性上、data[5]のような配列みたいに、数値を直接指定して抜き出すことはできません。特定の場所にあるデータを参照するには、イテレータという概念を利用します。このイテレータにリストの現在位置を格納することで、リスト内の好きな場所を参照することが可能となり、また、イテレータの前にアスタリスク「*」を付け加えることで、その場所にある実際の値を取得することができます。  最後にリストでよく使用される命令を一通り利用したサンプルプログラムをリストイメージとともにご紹介します。ほかにもいろいろと関数が用意されているので、実際にプログラムを組んでみて体感してみるとよいでしょう。
(リスト構造のイメージ)
(1)(2)(3)(4)
 
(5)(6)(7)(8)
 
(9)(10)(11)