C++ 2 (list)

C++のlistについて整理。

プログラムの仕様

走行経路を記述可能な仕組みを考えます。

ソースコード

list_001.cpp

#include <iostream>
#include <list>

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

enum
{
    MOVE,
    WAIT,
    STOP
};

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

class Command
{
public:

    int id;
    int type;

    float x;
    float y;

    float wait_time;
};

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

int main( int argc, char **argv )
{
    std::list<Command> command_list;
    /// high priority command list
    std::list<Command> high_list;
    /// normal priority command list
    std::list<Command> normal_list;

    Command command;
    command.id = 0;
    command.type = MOVE;

    command_list.push_back( command );

    command.id = 1;
    command.type = MOVE;
    command_list.push_back( command );

    command.id = 2;
    command.type = MOVE;
    normal_list.push_back( command );

    /// insert : normal list - unchanged
    command_list.insert( command_list.end(), normal_list.begin(), normal_list.end() );
    /// splice : normal list - no data
    // command_list.splice( command_list.end(), normal_list );

    command.id = 3;
    command.type = STOP;
    high_list.push_back( command );

    /// insert : high list - unchanged
    command_list.insert( command_list.begin(), high_list.begin(), high_list.end() );
    /// splice : high list - no data
    // command_list.splice( command_list.begin(), high_list );

    std::cout << "size : " << command_list.size() << std::endl;
    std::cout << "size : " << normal_list.size() << std::endl;
    std::cout << "size : " << high_list.size() << std::endl;

    return EXIT_SUCCESS;
}

説明 1

通常の移動先追加の指示と、時間待ちの指示はリストの最後に付けるようにしています。

緊急停止としてSTOPの場合はリストの先頭に付けるようにしています。

コピーしたいならinsertを使って、消えていいならspliceを使って速く処理させる、という判断になると思います。
STOPのcommand listは消えなくていいと思います。

説明 2

WAITとSTOPを分けておくか、WAITの下にSTOPを配置するかは必要と思います。
挙動を変えると思います。

enumは古い書き方です。

idで探すときはiteratorを使うのが最も読みやすいと思っています。自分はfor文使って回すのが少し違和感ありますが。どうしようかな。

説明 3

勿論、外から経路を送信できないと実際は使い物になりません。
listの使い方の説明と、自分用の整理のために書いているので、送信受信については機会があれば書きます。





«       »
カテゴリーcpp