logo

Algoritm kutubxonasi va ularni konteyner sinflari bilan ishlatish usullari

Yuklangan vaqt:

28.11.2024

Ko'chirishlar soni:

0

Hajmi:

77.103515625 KB
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 using namespace std;
int main() {
    // List tuzish
     list<int> lst = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // copy
     list<int> copied_lst;
     copy(lst.begin(), lst.end(),  back_inserter(copied_lst));
     cout << "Copied list: ";
    for (const auto& element : copied_lst) {
         cout << element << " ";
    }
     cout << endl;
    // transform
     list<int> transformed_lst;
     transform(lst.begin(), lst.end(),  back_inserter(transformed_lst),
                   [](int n) { return n * n; });
     cout << "Transformed list: ";
    for (const auto& element : transformed_lst) {
         cout << element << " ";
    }
     cout << endl;
    // replace
     replace(lst.begin(), lst.end(), 5, 50);
     cout << "   5 ni 50 ga almashtirgandan keyin ro yxat qiling: ";ʻ     for (const auto& element : lst) {
         cout << element << " ";
    }
     cout << endl;
    // remove
    lst.remove(3);
     cout << " 3 element o’chirildi: ";
    for (const auto& element : lst) {
         cout << element << " ";
    }
     cout << endl;
    // fill
     fill(lst.begin(), lst.end(), 0);
     cout << "   Ro'yxat 0 bilan to'ldirilgandan keyin: ";
    for (const auto& element : lst) {
         cout << element << " ";
    }
     cout <<  endl;
    // generate
     srand(time(0));
     generate(lst.begin(), lst.end(), []() { return  rand() % 100; });
     cout << "   Tasodifiy sonlarni yaratgandan so'ng ro'yxat: ";
    for (const auto& element : lst) {
         cout << element << " ";     }
     cout << endl;
    // unique
    lst.unique();
     cout << "   Ketma-ket dublikatlarni olib tashlaganingizdan so'ng ro'yxatlang:
";
    for (const auto& element : lst) {
         cout << element << " ";
    }
     cout << endl;
    return 0;
}
3. Saralash va unga tegishli algoritmlar   :
 Ushbu algoritmlar konteynerdagi  elementlarni saralash  yoki saralash  bilan
bog'liq operatsiyalarni bajarish uchun ishlatiladi.
 Misollar:  
sort,   partial_sort,   nth_element,   binary_search,   merge,   inplace_merge   va
hokazo.
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
int main() {
    // Deque tuzish      deque<int> dq = {5, 3, 9, 7, 1, 8, 2, 6, 4};
    // sort
     sort(dq.begin(), dq.end());
     cout << "Sortlangan deque: ";
    for (const auto& element : dq) {
         cout << element << " ";
    }
     cout << endl;
    // partial_sort
     deque<int> partial_sorted_dq = dq; // Asl dq saqlab qolish uchun nusxasini
yarating
          partial_sort(partial_sorted_dq.begin(),   partial_sorted_dq.begin()   +   3,
partial_sorted_dq.end());
     cout << "   Qisman tartiblangan deque (birinchi 3 element): ";
    for (const auto& element : partial_sorted_dq) {
         cout << element << " ";
    }
     cout << endl;
    // nth_element
          deque<int>   nth_element_dq   =   dq;   //   Asl   dq   saqlab   qolish   uchun
nusxasini //yarating
          nth_element(nth_element_dq.begin(),   nth_element_dq.begin()   +   4,
nth_element_dq.end());
     cout << "   nth_elementdan keyin deque (4-element median):";
    for (const auto& element : nth_element_dq) {
         cout << element << " ";     }
     cout << endl;
    // binary_search
    bool found = binary_search(dq.begin(), dq.end(), 6);
          cout   <<   "   6-element   uchun   ikkilik   qidiruv:"   <<   (found   ?   "topildi"   :
"topilmadi")<<endl;
    // merge
     deque<int> dq1 = {1, 3, 5, 7};
     deque<int> dq2 = {2, 4, 6, 8};
     deque<int> merged_dq(dq1.size() + dq2.size());
     merge(dq1.begin(), dq1.end(), dq2.begin(), dq2.end(), merged_dq.begin());
     cout << "   Birlashtirilgan deque: ";
    for (const auto& element : merged_dq) {
         cout << element << " ";
    }
     cout << endl;
    // inplace_merge
          deque<int>   inplace_merge_dq   =   dq;   //   //   Asl   dq   saqlab   qolish   uchun
nusxasini //yarating
          inplace_merge(inplace_merge_dq.begin(),   inplace_merge_dq.begin()   +  4,
inplace_merge_dq.end());
     cout << "   inplace_merge keyin deque: ";
    for (const auto& element : inplace_merge_dq) {
         cout << element << " ";
    }
     cout << endl;     return 0;
}
4.   Raqamli algoritmlar :
 Ushbu algoritmlar raqamli operatsiyalar uchun ishlatiladi.
 Misollar:     accumulate,0   inner_product,   iota,   min_element,   max_elementva
boshqalar.
#include <iostream>
#include <queue>
#include <vector>
#include <numeric> // accumulate
#include <algorithm> // min_element, max_element
using namespace std;
int main() {
    queue<int> q;
    // Elementlarni qo'shish
    for (int i = 1; i <= 10; ++i) {
        q.push(i);
    }
    // Barcha elementlarni qatordan vector ga nusxa olish
    vector<int> vec(q.size());
    for (size_t i = 0; i < vec.size(); ++i) {
        vec[i] = q.front();
        q.pop();     }
    // accumulate
    int sum = accumulate(vec.begin(), vec.end(), 0);
    cout << "Barcha elementlarning yig'indisi: " << sum << endl;
    //inner_product
        int   product   =   inner_product(vec.begin(),   vec.end(),   vec.begin(),   1,
multiplies<int>(), multiplies<int>());
    cout << "Barcha elementlar: " << product << endl;
    // iota
    iota(vec.begin(), vec.end(), 100);
    cout << "Vector uchun iota funksiyasidan so'ng : ";
    for (const auto& element : vec) {
        cout << element << " ";
    }
    cout << endl;
    // min_element
    auto min_elem = min_element(vec.begin(), vec.end());
    cout << "Minimum element: " << *min_elem << endl;
    // max_element
    auto max_elem = max_element(vec.begin(), vec.end());
    cout << "Maximum element: " << *max_elem << endl;
    return 0;
} Xulosa
Algoritm kutubxonasini va konteyner sinflarini birga ishlatish juda sodda va
samarali   yechimlar   toppish   uchun   foydalaniladi.   Biz   barcha   standart   algoritm
funksiyalarini   (masalan,   sort,   find,   accumulate   va   boshqalatrni   )   standart
konteyner   sinflari   bilan   ishlatishingiz   mumkin.   Konteyner   sinflari   esa
ma'lumotlarni saqlash va boshqa amallarni bajarish uchun mo'ljallangan.
Foydalanilgan adabyotlar va internet manbalari:
 https://hyperskill.org/learn/step/36769#algorithms   
 https://kompy.info/reja-algaritm-haqida-tushuncha-algaritm-kutubxonasi-   
sonli-hiso.html
 https://www.geeksforgeeks.org/the-c-standard-template-library-stl/

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