C++ Deque

در C++، Deque (Double-Ended Queue) یک ساختار داده‌ای STL است که مانند Queue و Vector ترکیبی از ویژگی‌های آن‌ها را دارد.
Deque اجازه می‌دهد عناصر را هم از ابتدا و هم انتهای دِک اضافه یا حذف کنیم، و به صورت پویا رشد می‌کند.

🔹 1️⃣ ایجاد Deque

#include <iostream> #include <deque> using namespace std; int main() { deque<int> d1; // دِک خالی deque<int> d2 = {10, 20, 30}; // با مقداردهی اولیه for(int x : d2) cout << x << " "; // خروجی: 10 20 30 return 0; }

🔹 2️⃣ اضافه کردن عناصر

deque<int> d; d.push_back(20); // اضافه به انتها d.push_front(10); // اضافه به ابتدا d.push_back(30); for(int x : d) cout << x << " "; // خروجی: 10 20 30
  • ()push_back → اضافه به انتها

  • ()push_front → اضافه به ابتدا

🔹 3️⃣ حذف عناصر

d.pop_back(); // حذف عنصر انتهایی d.pop_front(); // حذف عنصر ابتدایی for(int x : d) cout << x << " "; // خروجی بعد از حذف: 20

🔹 4️⃣ دسترسی به عناصر

cout << "Front: " << d.front() << endl; // عنصر اول cout << "Back: " << d.back() << endl; // عنصر آخر cout << "At index 0: " << d.at(0) << endl; // دسترسی با اندیس
  • می‌توان با []operator یا ()at به عناصر دسترسی داشت

  • ()front و ()back برای ابتدای دِک و انتها هستند

🔹 5️⃣ اندازه و وضعیت

cout << "Size: " << d.size() << endl; // تعداد عناصر if(d.empty()) cout << "Deque is empty" << endl;

🔹 6️⃣ درج و حذف در وسط

deque<int> d = {10, 20, 30}; auto it = d.begin() + 1; d.insert(it, 15); // درج در موقعیت iterator d.erase(it); // حذف عنصر در موقعیت iterator for(int x : d) cout << x << " "; // خروجی: 10 20 30

🔹 7️⃣ الگوریتم‌ها و حلقه‌ها

#include <algorithm> sort(d.begin(), d.end()); // مرتب‌سازی reverse(d.begin(), d.end()); // معکوس for(int x : d) cout << x << " ";

🔹 8️⃣ نکات کلیدی

  • Deque ترکیبی از ویژگی‌های Vector و Queue است:

    • دسترسی سریع به عناصر با اندیس (O(1) تقریبی)

    • اضافه و حذف سریع از ابتدا و انتها

  • مناسب برای زمانی که نیاز به اضافه/حذف در هر دو سر و دسترسی تصادفی داریم.

  • Iterator در Deque مانند Vector کار می‌کند و می‌توان با الگوریتم‌های STL استفاده کرد.

💡 خلاصه:
Deque در C++ یک ساختار داده‌ای پویا و انعطاف‌پذیر است که اجازه می‌دهد عناصر را از ابتدا و انتها اضافه یا حذف کنیم و به راحتی به عناصر داخلی با اندیس دسترسی داشته باشیم. با استفاده از توابع push_front, push_back, pop_front, pop_back, at, front, back و الگوریتم‌های STL می‌توان آن را به آسانی مدیریت کرد.