概要
Arduinoのコードを書く際に、処理をキューイングして順番に処理をしていきたい時がありました。Arduinoにはarrayはありますが、FIFO(後述)型のキューはデフォルトでは無いため、外部ライブラリをインクルードする必要があります。
結論
いくつかArduinoでキューイングができるライブラリがありますが、下記ライブラリがおすすめです。
レポジトリをzipダウンロードして、Arduino IDEで「スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール」を選択して先程ダウンロードしたzipファイルを選択してインストールしましょう。
使い方例
よくあるキューと同じような使い方で扱うことができます。
基本的な使い方
#include "Queue.h"
Queue<int> queue = Queue<int>();
void setup() {
Serial.begin(9600);
queue.push(1);
queue.push(2);
Serial.println(queue.pop()); // 1
}
void loop() {
}
pushでキューの中に値を入れて、popで取り出します。
peek
peekはキューの中身を取り出すことなく、先頭の値を返却します。
#include "Queue.h"
Queue<int> queue = Queue<int>();
void setup() {
Serial.begin(9600);
queue.push(1);
queue.push(2);
Serial.println(queue.peek()); // 1
Serial.println(queue.pop()); // 1
Serial.println(queue.pop()); // 2
}
void loop() {
}
clear
clearはキューの中身を全て削除します。
#include "Queue.h"
Queue<int> queue = Queue<int>();
void setup() {
Serial.begin(9600);
queue.push(1);
queue.push(2);
Serial.println(queue.pop()); // 1
queue.clear();
Serial.println(queue.pop()); // 0
}
void loop() {
}
キューとスタックの違い

値を出し入れする仕組みの代表的なものとしてキューとスタックが挙げられます。この2つはキューは先に入れたものが先に出てくる(FIFO = First in, first out)スタックは最後に入れたものが先に出てくる(LIFO = Last in, first out)という違いがあるのでこれを意識しながら使っていきましょう。
私は上図のようなイメージで考えています。スタックは物を上に積み上げていくイメージなので、取り出すときは上から(最後に積んだものから)となります。キューは行列に並ぶイメージで、列に加わる時は最後尾について、列から出ていくときは最前列の人(最初に並んだ人)からとなります。



