<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/stl_japanese/">
    <title>stl_japanese @ ウィキ</title>
    <link>http://w.atwiki.jp/stl_japanese/</link>
    <atom:link href="https://w.atwiki.jp/stl_japanese/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>stl_japanese @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2006-11-28T01:54:41+09:00</dc:date>
    <utime>1164646481</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/stl_japanese/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/stl_japanese/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/stl_japanese/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/stl_japanese/pages/1.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/stl_japanese/pages/4.html">
    <title>STL概要</title>
    <link>https://w.atwiki.jp/stl_japanese/pages/4.html</link>
    <description>
      STLとは・・・

STL(Standard Template Library)はC++標準ライブラリの一部です。
STLがC++の標準ライブラリに採用されたのが98年ごろと比較的最近です。        
STLは歴史的経緯からいくつかのバージョンが存在しますがここで扱うのは「標準STL(ANSIのSTL)」です。
現在使用されているコンパイラの一部では正しく動作しないことがありますが、これから発売されるコンパイラは問題ないでしょう。

基本的なコンポーネントはコンテナ・イテレータ・アルゴリズムです。
コンテナとはオブジェクト(データ)を管理する機能を提供するオブジェクトです。
イテレータとはポインタと似たコンテナから提供されるオブジェクト(データ)へのアクセス機能を有するオブジェクトです。
アルゴリズムとはコンテナが提供するイテレータを使用し、ある処理を行う汎用アルゴリズムです。
アルゴリズムはイテレータを介しオブジェクト（データ）を処理することによりコンテナ内部の構造を知る必要がありません。
コンテナはイテレータを提供することにより管理しているオブジェクト（データ）をアルゴリズムへ処理させることが出来ます。
このようにコンテナが期待した特性のイテレータを提供することによりアルゴリズムの恩恵を受けることができます。
また、アルゴリズムはコンテナが提供するイテレータにより汎用性の高いアルゴリズムを提供することができます。

STLを使用するにあたってはC++の文法、特にクラス・継承・オーバーロード・テンプレート・オペレータのオーバーロードなどある程度の知識が必要になります。

最後にSTLは使用することにより劇的に記述するソースの量を減らすことができます。また、スピードアップも期待できます。しかし、使いすぎは禁物です。C++はオブジェクト指向を提供しますがSTLはオブジェクト指向は提供しません。
オブジェクト指向とはまったく別の世界(ジェネリックプログラミング)です。
また、STLを知らない人から見るとまったく理解できないソースになってしまいますので注意が必要です。     </description>
    <dc:date>2006-11-28T01:54:41+09:00</dc:date>
    <utime>1164646481</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/stl_japanese/pages/3.html">
    <title>STL入門2</title>
    <link>https://w.atwiki.jp/stl_japanese/pages/3.html</link>
    <description>
      *単項関数オブジェクトを使ってみる

STLには関数オブジェクト(もしくはファンクションオブジェクトまたはファンクタ)と呼ばれるコンポーネントが存在します。
STLでは関数オブジェクトはアルゴリズムと共にもっとも作成する機会が多いコンポーネントです。
STLのアルゴリズムには引数に関数オブジェクトを取るものがあり、アルゴリズムの引数に渡す関数オブジェクトによりアルゴリズムを動作を変えることができるのです。
したがって、関数オブジェクトの種類によりアルゴリズムのバリエーションが増えることになります。
関数オブジェクトは基本クラスunary_functionまたは基本クラスbinary_function から継承しoperator()を実装しなければなりません。
パラメータが１つ(単項関数)の場合はunary_functionからパラメータが２つ(二項関数)の場合はbinary_functionからそれぞれ継承します。

----

unary_function基本クラスの定義

template&lt;class _Arg, class _Result&gt;
struct unary_function
{
    typedef _Arg argument_type;
    typedef _Result result_type;
};

----

unary_function・binary_functionはヘッダファイル&lt;functional&gt;に定義されているのでincludeを忘れないでください。
以下に関数オブジェクトのサンプルコードを示します。 

----
例1

 #include &lt;functional&gt;

template &lt;class T&gt;
struct OutputData : public unary_function&lt;T, void&gt;
{
    void operator()(argument_type _t) {
        cout &lt;&lt; _t &lt;&lt; &#039; &#039; ;
    }
}; 


----

関数オブジェクトOutputDataは基本クラスunary_functionから継承し、パラメータはclass Tになります。
基本クラスunary_funct    </description>
    <dc:date>2006-11-28T00:56:53+09:00</dc:date>
    <utime>1164643013</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/stl_japanese/pages/2.html">
    <title>STL入門1</title>
    <link>https://w.atwiki.jp/stl_japanese/pages/2.html</link>
    <description>
      *アルゴリズムを使ってみる

初めに簡単なアルゴリズムのサンプルを示します。
アルゴリズムを使用する場合は記述されているヘッダをinlucdeする必要があります。
ここでは

 #include &lt;algorithm&gt;

を記述してください。
また、STLは全てstdの名前空間に記述されているので事前に

 using namespace std;


を記述するといいでしょう。
使用するアルゴリズムはfillです。
このfillアルゴリズムは指定した範囲に指定した値を充填します。

※コンテナ・イテレータの解説までコンテナは配列・イテレータはポインタで代用しています。
しばらくはコンテナは配列・イテレータはポインタと覚えていても間違いではないでしょう。



----

例１
 #include &lt;algorithm&gt;

 using namespace std;

int main(int argc, char * argv[])
{
    int v[10 ];

    fill(v, v+10, 100 );

    for (int i = 0; i &lt; 10; i++)
        printf(&quot;%d,&quot;, v[i]);

    return 0 ;
}



----

実行結果
100,100,100,100,100,100,100,100,100,100,

----


以下の記述がアルゴリズムを使用している箇所です。    

fill(v, v+10, 100);
    
アルゴリズムfillは第一引数に充填を開始するイテレータ（配列の先頭）を、第二引数に充填を終了するイテレータ（配列末尾の１つ後ろ）を、第三引数に充填する値を渡します。
結果は実行結果をご覧ください。
指定された要素が全て充填されていることがわかります。  
このようにSTLのアルゴリズムはイテレータ(ポインタ)経由でデータに対し、ある処理(アルゴリズム)を適用します。

※STLでは終了を示すイテレータは要素の最後の一つ後ろを指すことが慣例となっています。 
 



*コンテナを使ってみる

次にコンテナを使用してみましょ    </description>
    <dc:date>2006-11-28T00:50:33+09:00</dc:date>
    <utime>1164642633</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/stl_japanese/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/stl_japanese/pages/1.html</link>
    <description>
      ＊＊stl_japanese@wikiへようこそ
-stl_japanese@wikiはみんなで気軽に編集できるC++言語標準ライブラリSTLのまとめサイトです。
-このページは自由に編集することができます。


＊＊まずはこちらをご覧ください。
-[[@wikiの基本操作&gt;http://atwiki.jp/guide/category2.html]]
-[[用途別のオススメ機能紹介&gt;http://atwiki.jp/guide/category22.html]]
-[[@wikiの設定/管理&gt;http://atwiki.jp/guide/category6.html]]


＊＊メニュー
-[[STL概要]]
-[[STL入門1]]
-[[STL入門2]]

＊＊バグ・不具合を見つけたら？
お手数ですが、こちらからご連絡宜しくお願いいたします。
⇒http://atwiki.jp/guide/contact.html


＊＊分からないことは？
-[[@wiki ご利用ガイド&gt;http://atwiki.jp/guide/]]
-[[よくある質問&gt;http://atwiki.jp/guide/category1.html]]
-[[@wikiへお問い合わせ&gt;http://atwiki.jp/guide/contact.html]]
等をご活用ください    </description>
    <dc:date>2006-11-28T01:56:15+09:00</dc:date>
    <utime>1164646575</utime>
  </item>
  </rdf:RDF>
