後から要素を追加できるVectorクラスのサンプルコード

後から要素を追加/削除できるコレクション型クラスです。

概要

配列(Arrays)を使うと同じ型の要素を複数まとめて管理できますが、予め要素数を指定しなければならないため、要素数が可変する場合には使い辛いです。

そんな時に使えるのがVectorクラス。通常の型だけでなくクラス型(プロバイダークラスなど)を格納できる点もポイントです。

よく使うプロパティ/メソッド

要素の追加

命令 目的 戻り値の型
Push_back(obj) 「コレクションの最後」に要素を追加 (無し)
Insert(idx,obj) 「指定インデックスの前」に要素を追加 int
Insert(idx,cnt,Obj) 「指定インデックスの前」に要素を追加
(繰り返し)
int

要素の削除

命令 目的 戻り値の型
Pop_back 「コレクションの最後の」要素を削除 (無し)
Erase(idx) 「指定インデックスの」要素を削除 int
Erase(idx1,idx2) 「指定インデックス範囲の」要素を削除 int
Clear 「すべての」要素を削除 (無し)

要素の取得

命令 目的 戻り値の型
Items[idx] 「指定インデックスの」要素を取得 Object
At(idx) 「指定インデックスの」要素を取得 Object
Front 「コレクションの最初の」要素を取得 Object
Back 「コレクションの最後の」要素を取得 Object
Count コレクション内の要素数をカウント int

判定

命令 目的 戻り値の型
Empty コレクションが空であるかチェック bool

EasyLanguageサンプルコード

インジケーターを新規作成して以下のコードを貼り付け、チャートに設定ください。結果が印刷ログに表示されます。

using elsystem;
using elsystem.collections;

Vars:
    Vector vecData( NULL ),
    string strOutput( "" );

Once ( LastBarOnChartEx ) Begin
    
    ClearPrintLog;

    //----------------------------------------
    // 0. インスタンスの新規作成
    //----------------------------------------

    vecData = Vector.Create();

    //----------------------------------------
    // 1. 要素の追加(最後に)
    //----------------------------------------
    
    vecData.Push_back( 100 );
    vecData.Push_back( 200 );
    vecData.Push_back( 300 );
    vecData.Push_back( 400 );
    vecData.Push_back( 500 );
    
    strOutput = "";
    For Value1 = 0 to vecData.Count - 1 Begin
        strOutput += ELString.Format( "{0},", vecData.Items[Value1] );
    End;
    
    Print( strOutput );
    
    //----------------------------------------
    // 2. 要素の追加(指定インデックスの前に)
    //----------------------------------------
    
    vecData.Insert( 2, 77 );
    
    strOutput = "";
    For Value1 = 0 to vecData.Count - 1 Begin
        strOutput += ELString.Format( "{0},", vecData.Items[Value1] );
    End;
    
    Print( strOutput );
    
    //----------------------------------------
    // 3. 要素の追加(指定インデックスの前に繰り返し)
    //----------------------------------------
    
    vecData.Insert( 5, 4, 1 );
    
    strOutput = "";
    For Value1 = 0 to vecData.Count - 1 Begin
        strOutput += ELString.Format( "{0},", vecData.Items[Value1] );
    End;
    
    Print( strOutput );
    
    //----------------------------------------
    // 4. 要素の削除(最後から)
    //----------------------------------------
    
    vecData.Pop_back();
    vecData.Pop_back();
    vecData.Pop_back();
    vecData.Pop_back();
    
    strOutput = "";
    For Value1 = 0 to vecData.Count - 1 Begin
        strOutput += ELString.Format( "{0},", vecData.Items[Value1] );
    End;
    
    Print( strOutput );
    
    //----------------------------------------
    // 5. 要素の削除(指定インデックスを)
    //----------------------------------------
    
    vecData.Erase( 0 );
    vecData.Erase( 2 );
    
    strOutput = "";
    For Value1 = 0 to vecData.Count - 1 Begin
        strOutput += ELString.Format( "{0},", vecData.Items[Value1] );
    End;
    
    Print( strOutput );
    
    //----------------------------------------
    // 6. 要素の取得
    //----------------------------------------
    
    strOutput = ELString.Format(
        "{0},{1},{2},{3},",
        vecData.Front(),
        vecData.Back(),
        vecData.Items[2],
        vecData.at(1)
    );
    
    Print( strOutput );
    
    //----------------------------------------
    // 7. 空判定
    //----------------------------------------
    
    strOutput = ELString.Format(
        "{0}",
        vecData.Empty()
    );
    
    Print( strOutput );
    
    vecData.Clear();
    
    strOutput = ELString.Format(
        "{0}",
        vecData.Empty()
    );
    
    Print( strOutput );
End;

{ ** Copyright © Trade Tech All Rights Reserved ** }

表示例

本クラスの使いどころ

標準EasyLanguageでもオブジェクト指向EasyLanguageでも活用できるクラスです。

複雑なプログラムになるほど、利用する頻度は高くなるでしょう。ぜひご活用ください。

クラス一覧ページに戻る