صف ها (Queues)
صف در C++ مثل صف سوپرمارکت است. نفر اول زودتر می رود. این روش را FIFO می گویند. در صف فقط سرِ صف یا تهِ صف را می بینی.
صف در C++ (Queue) چیست؟
صف یک «ساختار داده (Data Structure)» با ترتیب FIFO است. یعنی «اول وارد، اول خارج». برای استفاده باید هدرِ <queue> را اضافه کنی.
#include <queue>
ساخت یک صف
با کلیدواژه queue و نوعِ داخل <> یک صف بساز.
std::queue<std::string> cars;
نکته: مقداردهی با {} مجاز نیست. باید بعداً با .push() پر شود.
افزودن عناصر به صف
برای افزودن از .push() استفاده کن. عنصر در انتهای صف می رود.
std::queue<std::string> cars;
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
دسترسی به سر و ته صف
ایندکس وجود ندارد. فقط با .front() و .back() می خوانی.
std::cout << cars.front();
std::cout << cars.back();
تغییر سر و ته صف
می توانی مقدارِ سر صف و ته صف را عوض کنی.
cars.front() = "Tesla";
cars.back() = "VW";
std::cout << cars.front();
std::cout << cars.back();
حذف از صف
برای حذف از .pop() استفاده کن. همیشه سرِ صف حذف می شود.
std::queue<std::string> cars;
cars.push("Volvo");
cars.push("BMW");
cars.push("Ford");
cars.push("Mazda");
cars.pop();
std::cout << cars.front();
اندازه صف
با .size() تعداد عناصر صف را بگیر.
std::cout << cars.size();
بررسی خالی بودن صف
با .empty() می فهمی صف خالی است یا نه.
std::queue<std::string> q1;
std::cout << q1.empty();
std::queue<std::string> q2;
q2.push("Volvo");
q2.push("BMW");
q2.push("Ford");
q2.push("Mazda");
std::cout << q2.empty();
تمرین سه مرحله ای
- یک صف رشته ای بساز.
- چهار مقدار push کن.
- یکی pop کن و front را چاپ کن.
نکته: اگر دسترسی ایندکسی می خواهی، وکتورها مناسب اند. اگر افزودن و حذف از هر دو طرف می خواهی، دک (Deque) بهتر است. برای مقایسه LIFO هم پشته ها را ببین.
جمع بندی سریع
- FIFO یعنی اول وارد، اول خارج.
- فقط front و back در دسترس است.
- .push اضافه می کند؛ .pop از سر صف حذف می کند.
- .size و .empty وضعیت صف را می گویند.
