Algoritm kutubxonasi va ularni konteyner sinflari bilan ishlatish usullari
Algoritm kutubxonasi va ularni konteyner sinflari bilan ishlatish usullari 1) Reja: 2) Kirish 3) Nazariy qism a. Algoritm kutubxonasi haqida b. Algoritm kutubxonasining STL kutubxonasi tarkibi c. STL komponentalari d. STL algoritmining asosiy toifalari va ularning misollari 4) Xulosa 5) Foydalangan adabiyotlar
Algoritm kutubxonasi, C++ dasturlarida umumiy algoritmlar uchun o'zlashtirilgan, standart C++ kirish joyi (header files) bo'lib, har birida amaliy algoritmni yoki alg'oritmik operatsiyani bajarish uchun funksiyalar jamlangan. Bu kutubxona, professional dasturchilar tomonidan yaratilgan va umumiy sharoitlarda ishlatiladigan algoritmik funksiyalarni o'z ichiga oladi. Algoritm kutubxonasi, C++ standart kutubxonasining (STL) bir qismi hisoblanadi. Bu kutubxonada yana boshqa STL konteynerlari (masalan, vector, list, deque), iteratorlar, alg'oritm funksiyalari, maxsus data strukturalar (masalan, heap), funksiya ob'ektlari va boshqalar jamlangan. Ba'zi ko'p ishlatiladigan funksiyalar: 1. Sort : Ro'yxatni tartiblash. 2. Search : Elementni topish. 3. Count : Elementlar sonini hisoblash. 4. Copy : Ma'lum bir qatorli konteynerdagi elementlarni boshqa bir joyga nusxalash. 5. Swap : O'zgaruvchilarni almashtirish. 6. Min/Max : Minimum va maksimum elementni topish. 7. Reverse : Ro'yxatni teskari tartibda tartiblash. 8. Merge : Ikki o'sish ketma-ketligini birlashtirish. 9. Unique : Duplikat elementlarni olib tashlash. 10. Transform : Elementlarni boshqacha ma'lum bir tartibda o'zgartirish. STL bir nechta muhim komponentlardan, jumladan, konteynerlar, algoritmlar va iteratorlardan iborat. Keling, ushbu mavzudagi ba'zi atamalarni tushunaylik: Konteynerlar: Konteynerlar - bu ob'ektlar to'plamini tuzilgan tarzda saqlaydigan sinflar va C++ dagi konteynerlarga vektorlar, ro'yxatlar, xaritalar va boshqalarni o'z ichiga oladi.
Algoritmlar: Algoritmlar konteynerlarda saqlanadigan ma'lumotlar bilan operatsiyalarni bajaradigan funktsiyalardir. Ular saralash, qidirish va o'zgartirish funktsiyalarini o'z ichiga oladi. Iteratorlar: Iteratorlar - bu konteyner elementlari bo'ylab harakatlanish imkonini beruvchi ob'ektlar. Ular konteynerlar va algoritmlar o'rtasida ko'prik vazifasini bajaradi. C++ tilida STL turli xil ma'lumotlar tuzilmalari, konteynerlar va iteratorlarda ishlaydigan keng ko'lamli algoritmlarni taqdim etadi. Ushbu algoritmlar tabiatan umumiydir, ya'ni ular har bir maxsus foydalanish holati uchun qayta yozilmasdan har xil turdagi ma'lumotlar va konteynerlar bilan ishlashi mumkin. STL-dagi algoritmlar shablon funktsiyalari sifatida amalga oshiriladi, bu ularni juda ko'p qirrali va qayta foydalanishga imkon beradi. Ushbu algoritmlar konteynerlarda saqlangan ma'lumotlarni saralash, qidirish va manipulyatsiya qilish kabi turli xil operatsiyalarni bajaradi. STL algoritmlarini funksionalligiga ko‘ra bir necha guruhlarga bo‘lish mumkin. Quyida STL algoritmlarining asosiy toifalari keltirilgan: 1. Konteynerlarni o’zgartira olmaydigan algoritmlar : Ushbu algoritmlar konteynerdagi elementlarni o'zgartirmaydi, ular faqat tekshiradi yoki ular ustida ba'zi amallarni bajaradi. Misollar: for_each, count, find, all_of, any_of, none_of va hokazo. #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { // Vector tuzish
vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // for_each for_each(vec.begin(), vec.end(), [](int& n) { cout << n << " "; }); cout << endl; // count int count1 = count(vec.begin(), vec.end(), 5); cout << "5 soni: " << count1 << endl; // find auto it = find(vec.begin(), vec.end(), 8); if (it != vec.end()) { cout << "Topildi: " << *it << endl; } else { cout << "Topilmadi!" << endl; } // all_of if (all_of(vec.begin(), vec.end(), [](int i) { return i % 2 == 0; })) { cout << "Juft sonlar" << endl; } else { cout << "Toq sonlar" << endl; } // any_of if (any_of(vec.begin(), vec.end(), [](int i) { return i % 2 == 0; })) { cout << "Juft son qaytarildi" << endl; } else {
cout << "Toq son qaytarildi" << endl; } // none_of if (none_of(vec.begin(), vec.end(), [](int i) { return i < 0; })) { cout << "Musbat son" << endl; } else { cout << "Manfiy son" << endl; } return 0; } 2. Konteynerlarni o’zgartira oladigan algoritmlar : Ushbu algoritmlar konteynerdagi elementlarni o'zgartiradi yoki o'zgartirilgan elementlar bilan yangi konteyner ishlab chiqaradi. Misollar: copy, transform, replace, remove, fill, generate, unique va hokazo. #include <iostream> #include <list> #include <algorithm> #include <iterator> #include <cstdlib> // srand, rand #include <ctime> // time