std::algorithm C++ স্ট্যান্ডার্ড লাইব্রেরির একটি গুরুত্বপূর্ণ হেডার, যা বিভিন্ন ধরণের অ্যালগরিদম সরবরাহ করে। এই অ্যালগরিদমগুলো কনটেইনারের উপর বিভিন্ন কার্য সম্পাদন করতে ব্যবহৃত হয়, যেমন সাজানো (sorting), অনুসন্ধান (searching), গণনা (counting), পরিবর্তন (modification) ইত্যাদি। std::algorithm হেডারটি কনটেইনারের সাথে সহজে এবং দ্রুত কাজ করার সুবিধা দেয়।
নিচে std::algorithm হেডারের কিছু গুরুত্বপূর্ণ ফাংশন এবং তাদের ব্যাখ্যা দেওয়া হলো:
১. std::sort
এই ফাংশনটি একটি রেঞ্জকে ছোট থেকে বড় বা বড় থেকে ছোট সাজানোর জন্য ব্যবহৃত হয়।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end()); // ছোট থেকে বড় সাজানো
// আউটপুট: 1 2 3 4 5
for (int n : vec) {
std::cout << n << " ";
}
return 0;
}২. std::reverse
একটি রেঞ্জকে উল্টিয়ে দেয়।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::reverse(vec.begin(), vec.end());
// আউটপুট: 5 4 3 2 1
for (int n : vec) {
std::cout << n << " ";
}
return 0;
}৩. std::find
এই ফাংশনটি একটি নির্দিষ্ট উপাদান খুঁজে বের করতে ব্যবহৃত হয় এবং এটি প্রথম মিলের ইটরেটর রিটার্ন করে। যদি না পাওয়া যায়, তাহলে end() রিটার্ন করে।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {10, 20, 30, 40, 50};
auto it = std::find(vec.begin(), vec.end(), 30);
if (it != vec.end()) {
std::cout << "Element found: " << *it << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}
return 0;
}৪. std::count
এই ফাংশনটি একটি নির্দিষ্ট উপাদানের সংখ্যা গণনা করে।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 2};
int count_of_2 = std::count(vec.begin(), vec.end(), 2);
std::cout << "Count of 2: " << count_of_2 << std::endl; // আউটপুট: 3
return 0;
}৫. std::accumulate (numeric হেডারে অন্তর্ভুক্ত)
এই ফাংশনটি একটি রেঞ্জের উপাদানগুলোর সমষ্টি বের করে। এটি #include <numeric> এর অন্তর্গত।
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int sum = std::accumulate(vec.begin(), vec.end(), 0);
std::cout << "Sum: " << sum << std::endl; // আউটপুট: 15
return 0;
}৬. std::all_of, std::any_of, std::none_of
এই ফাংশনগুলো কন্ডিশনের ভিত্তিতে একটি রেঞ্জে চেক করে যে সমস্ত উপাদান, কিছু উপাদান বা কোনো উপাদানই কন্ডিশন পূরণ করে কিনা।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
bool all_positive = std::all_of(vec.begin(), vec.end(), [](int i){ return i > 0; });
bool any_negative = std::any_of(vec.begin(), vec.end(), [](int i){ return i < 0; });
bool none_above_10 = std::none_of(vec.begin(), vec.end(), [](int i){ return i > 10; });
std::cout << "All positive: " << all_positive << std::endl; // true
std::cout << "Any negative: " << any_negative << std::endl; // false
std::cout << "None above 10: " << none_above_10 << std::endl; // true
return 0;
}৭. std::copy
একটি রেঞ্জের উপাদানগুলোকে অন্য রেঞ্জে কপি করতে ব্যবহৃত হয়।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int> vec_copy(vec.size());
std::copy(vec.begin(), vec.end(), vec_copy.begin());
for (int n : vec_copy) {
std::cout << n << " ";
}
return 0;
}৮. std::unique
একটি রেঞ্জের মধ্যে ডুপ্লিকেট উপাদান সরিয়ে দেয় (ধারাবাহিকভাবে থাকা ডুপ্লিকেট)। এটি std::erase এর সাথে ব্যবহার করতে হয়।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4, 4, 5};
auto last = std::unique(vec.begin(), vec.end());
vec.erase(last, vec.end());
for (int n : vec) {
std::cout << n << " ";
}
return 0;
}৯. std::transform
একটি ফাংশন প্রয়োগ করে একটি রেঞ্জের প্রতিটি উপাদানকে পরিবর্তন করতে ব্যবহৃত হয়।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int> result(vec.size());
std::transform(vec.begin(), vec.end(), result.begin(), [](int i){ return i * 2; });
for (int n : result) {
std::cout << n << " ";
}
return 0;
}১০. std::fill
এই ফাংশন একটি নির্দিষ্ট মান দিয়ে একটি রেঞ্জের প্রতিটি উপাদান পূর্ণ করে।
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec(5);
std::fill(vec.begin(), vec.end(), 10);
for (int n : vec) {
std::cout << n << " ";
}
return 0;
}উপসংহার
std::algorithm হেডারটি C++ এ অনেক ধরনের অ্যালগরিদম সরবরাহ করে, যা কনটেইনারের উপাদানগুলোর উপর দ্রুত এবং কার্যকরী কাজ করতে সাহায্য করে। এটি স্ট্যান্ডার্ড লাইব্রেরির একটি অত্যন্ত গুরুত্বপূর্ণ অংশ এবং এর ফাংশনগুলো ব্যবহার করে প্রোগ্রামাররা আরও সহজে এবং কার্যকরভাবে প্রোগ্রাম লিখতে পারে।
Read more