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の使い方の説明と、自分用の整理のために書いているので、送信受信については機会があれば書きます。