queueすなわちキュー
の続きです。流れともいふ。時々しか使わないので、実例から
拙作のユーティリティープログラムである、Remote Repository Manager
での使用例を示します。レポジトリを複数選択して一括deleteする時に、選択されたレポジトリをキューに入れて、逐次実際のdeleteをするという場面です。詳細を省いて、コアな部分だけ書くと、
#include <queue>
std::queue<String> que;
for( int i = 0 ; i < ListView1->Items->Count ; i++ ){
aentry = ListView1->Items->Item[i];
if( aentry->Checked ){
a = aentry->SubItems;
String deleteone = a->Strings[0];
//int id = StrToInt(a->Strings[1]);
que.push(deleteone);
Memo2->Lines->Add("path : " + deleteone + "pushed");
}
}
queueへの追加pushは、上記のようにque.pushだけ。逐次削除する部分は、
while (!que.empty()) {
String nextpath = que.front();
DeleteOne(nextpath);
Memo2->Lines->Add("delete cycle finished for " + nextpath);
que.pop();
}
que.front()で取り出して、que.pop()で後始末ですね。”ひと当たり”ロジックとしてしか参考になりませんが、悪しからず。そのうちソースコード公開するかもしれません。
補足:Giteaには他のサーバ上のレポジトリを取り込む機能、彼らはMigrateといってますが、そういう機能があります。選択したレポジトリをいったんqueueに入れておいて、後で一括Migrateするという場合にもqueueを使っています。それにしてもqueueってspelling憶え辛いですね。って、困難というほどではありませんが。ちなみにGiteaお勧めです。軽いです。インストールはGitlab程ではないですが、比較的簡単です。
コメント