C++ Algorithm

در C++، Algorithm به مجموعه‌ای از توابع آماده STL گفته می‌شود که عملیات متداول روی ساختارهای داده‌ای را به صورت سریع و بهینه انجام می‌دهند. این توابع برای مرتب‌سازی، جستجو، تغییر و پردازش عناصر کاربرد دارند و با انواع کانتینرها مثل Vector، List، Set و Map قابل استفاده هستند.

🔹 1️⃣ استفاده از <algorithm>

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> v = {5, 2, 9, 1, 7}; sort(v.begin(), v.end()); // مرتب‌سازی صعودی for(int x : v) cout << x << " "; // خروجی: 1 2 5 7 9 return 0; }

اکثر توابع الگوریتم STL با Iterator کار می‌کنند.

🔹 2️⃣ جستجو و پیدا کردن عناصر

vector<int> v = {1, 2, 3, 4, 5}; // جستجوی خطی auto it = find(v.begin(), v.end(), 3); if(it != v.end()) cout << "Element found: " << *it << endl; // بررسی وجود با any_of bool exists = any_of(v.begin(), v.end(), [](int x){ return x == 4; }); cout << exists << endl; // خروجی: 1 (true)

🔹 3️⃣ مرتب‌سازی و معکوس

vector<int> v = {4, 1, 7, 3}; sort(v.begin(), v.end()); // صعودی sort(v.begin(), v.end(), greater<int>()); // نزولی reverse(v.begin(), v.end()); // معکوس عناصر

🔹 4️⃣ الگوریتم‌های مفید STL

الگوریتمتوضیح
sortمرتب‌سازی عناصر
reverseمعکوس کردن عناصر
findپیدا کردن عنصر
countتعداد دفعات تکرار عنصر
max_element / min_elementپیدا کردن بیشینه و کمینه
accumulate (در <numeric>)جمع عناصر
any_of, all_of, none_ofبررسی شرط روی عناصر
binary_searchجستجوی دودویی (برای داده مرتب)
lower_bound / upper_boundپیدا کردن محدوده در داده مرتب

🔹 5️⃣ مثال جمع عناصر

#include <numeric> // برای accumulate vector<int> v = {1, 2, 3, 4, 5}; int sum = accumulate(v.begin(), v.end(), 0); // جمع = 15 cout << "Sum: " << sum << endl;

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

  • توابع الگوریتم سریع و بهینه هستند و باعث کاهش کد دستی می‌شوند.

  • اکثر الگوریتم‌ها با Iterator کانتینرها کار می‌کنند.

  • الگوریتم‌ها برای Vector, List, Set, Map, Deque و بسیاری از کانتینرها قابل استفاده هستند.

  • انتخاب الگوریتم مناسب می‌تواند زمان اجرای برنامه را به شدت کاهش دهد.

💡 خلاصه:
STL Algorithms در C++ مجموعه‌ای از توابع استاندارد برای پردازش، مرتب‌سازی، جستجو و تغییر داده‌ها هستند. با استفاده از آن‌ها می‌توان بدون نوشتن حلقه‌های طولانی، داده‌ها را به شکل بهینه و خوانا مدیریت کرد.