忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

stlを利用したlistコンテナ

ども・・・・・・GES会長の和佐田雅史です。
一年生からリストコンテナを使いたいという要望があったので乗せておきます。


STLのリストコンテナを利用したプログラム

STLはスタンダードテンプレートライブラリと言い、C++に標準で入っているライブラリで、開発効率をかなり上げることが出来ます。

 

STLを利用する事によって変数の型に依存せずにプログラム組めるようになります。

例で言うとint型のリストchar型のリストが違うだけでアルゴリズムは同じです。そのアルゴリズムの部分だけを組んでおいて後から使用する変数の型を指定するプログラムの組み方がSTLの組み方になります。

             

今回はリストコンテナと言うものを利用したプログラムを解説します。

<>左のような括弧の中にで指定したリスト構造を勝手に作ってくれる便利なものをしようすることで一々手動でリスト構造を設計すること無く、自動生成をしてくれるものです。

 

ではまず宣言の仕方から説明します。

: 宣言の仕方

// int型のリスト構造を作成するプログラム

#include <conio.h>

#include <list>

 

// 名前空間stdを使用する

using namespace std;

 

int main()

{

        // 定義

list< int > intList;

 

              // 以下STLによるプログラム

 

return 0;
}
 

※作成するリストの型はintは勿論構造体やクラス等の型も指定できるのでリストクラス等を作成する場合などには便利です。

                  

 

格納の仕方

値を格納するにはpushbackメソッドを使用します。リストの末尾に要素を追加する事が出来ます。



 

//----------------------------------------------------

// 010までの値を格納する

//----------------------------------------------------

for( int i=0 ; i<=10 ; i++ )

{

    // pushbackメソッドで値を格納

    intList.push_back( i );

}
※同様にpopbackというメソッドを使用するとリストの末尾の要素を消す事が出来ます。
 

これで宣言が完了しました。

では次に値を参照するにはどうすればよいのでしょう?
通常ではリストを参照するには基本的にHeadからTailまでをポインタで参照しながら処理します。


ではここでリストの先頭と末尾を取得するメソッドを紹介しましょう。



 

// int型のリストコンテナの要素を参照する物

list< int >::iterator i_IntIterator;

 

// リストの先頭を取得します

i_IntIterator = intList.begin();

 

// リストの末尾を取得します

i_IntIterator = intList.end();

 

 

格納した値を参照するには?

格納した値を参照する時はiterator( イテレータ )と言うものを使います。

イテレータとは反復子と呼ばれ、ポインタのような動きをします。

 

宣言は以下のようにします。

list< int >::iterator 変数名;

 

// イテレータを宣言する : ポインタみたいなもの

list< int >::iterator i_IntIterator;


以上の事を踏まえると、以下のようなループになると思います。

 

// イテレータの参照が先頭から末尾で無いときイテレータは次を参照続ける

for( i_IntIterator = intList.begin() ; i_IntIterator != intList.end() ; i_IntIterator++ )

{

        printf("%d\n" , ( *i_IntIterator ) );

}
 

 

 

     ( *i_IntIterator )とはどういうことなのか?

ポインタが参照している値を弄るには*p = 10のようにアスタリスクを付けます。

同じように、( *i_IntIterator ) = 10とすると、

 

int型のイテレータが参照しているものの中身に10という値を代入する

 

という事になります。

因みにですが、変数のアドレスがほしい場合は

 

&( *i_IntIterator )

 

のような記述の仕方になります。

イテレータはポインタと同じような動きはしますが、ポインタではない(正確にはメンバでint型のポインタオブジェクトを保持している)ので直接アクセスする事が出来ません。

 

なので、

 

イテレータの中に格納されている変数の中身のアドレス

 

と言うように記述してやらないと、構文エラーになります。

 

以上でlistコンテナの説明は終わりです。
他のvectorやmapコンテナ等も同じようにiteratorを利用する事が多いので触る予定の人は今のうちに慣れておいたほうが良いでしょう。

 

因みにですが、これが使えるプログラマと使えないプログラマでは開発における効率の差が100倍近くあります。

業界でC++が必須の技術となっているので必ず使えるようになっておきましょう。

それでは今日の
 講義はここまでとします。お疲れ様でした。

 

拍手[1回]

PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

04 2024/05 06
S M T W T F S
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

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]