56 / 90

C++ std::list

C++ std::list (Bog'langan ro'yxat)

C++ roʻyxati bu STL container boʻlib, elementlarni tasodifiy bogʻliq boʻlmagan joylarda saqlaydi. Ketma-ket tartibni saqlash uchun har bir ro'yxat elementi ikkita havolani o'z ichiga oladi:

  • oldingi elementga ishora qiluvchi biri
  • keyingi elementga ishora qiluvchi boshqasi

C++ STL list implementation

C++ STL  list implementation showing its doubly linked nature

C++ da STL ro'yxati doubly-linked list data structure ni amalga oshiradi. Natijada, biz oldinga ham, orqaga ham takrorlashimiz mumkin.

C++ STL ro'yxatini yarating

Ro'yxatni yaratish uchun dasturimizga list sarlavha faylini kiritishimiz kerak.

example.cpp
#include<list>

Sarlavha faylini import qilgandan so'ng, biz quyidagi sintaksis yordamida ro'yxatni e'lon qilishimiz mumkin:

example.cpp
std::list<Type> list_name = {value1, value2, ...};

Bu yerga,

  • std::list - declares an STL container of type list -<Type> - ro'yxatda saqlanadigan qiymatlarning data type -list_name - ro'yxatga berilgan noyob nom -value1, value2, ... - ro'yxatda saqlanadigan qiymatlar

Keling, bir misolni ko'rib chiqaylik,

example.cpp
// butun sonlar ro'yxatini yarating
std::list<int> numbers = {1, 2, 3, 4, 5};

// belgilar turi ro'yxatini tuzing
std::list<char> vowels = {'a', 'e', 'i', 'o', 'u'};

[!NOTE] assignment operator ni eslatmasdan ro'yxat elementlarini ham kiritishimiz mumkin. Masalan, std::list<int> numbers {1, 2, 3, 4, 5};

Misol: C++ STL ro'yxati

example.cpp
#include <iostream>
#include <list>

using namespace std;

int main() {

    // ro'yxatini yarating
    list<int> numbers {1, 2, 3, 4};
  
    // ro'yxat elementlarini ko'rsatish
    cout << "List Elements: ";
    for(int number : numbers) {
        cout << number <<", ";
    }
    
    return 0;

}

Chiqish

kod
List Elements: 1, 2, 3, 4,

Yuqoridagi misolda biz quyidagi elementlardan iborat raqamlar nomli roʻyxat yaratdik: 1, 2, 3, 4. Keyin roʻyxat elementlarini chop etish uchun ranged for loop dan foydalandik.

[!NOTE] Biz std::list o'rniga list dan foydalandik, chunki using namespace std; yordamida std namespace ni allaqachon aniqlaganmiz.

Ro'yxatdagi asosiy operatsiyalar

C++ STL biz ro'yxatlarda turli operatsiyalarni bajarish uchun foydalanishimiz mumkin bo'lgan turli xil functions ni taqdim etadi. Keling, quyidagi operatsiyalarni bajarish uchun keng tarqalgan ro'yxat funksiyalarini ko'rib chiqaylik:

  1. Elementlarni qo'shish
  2. Elementlarga kirish
  3. Elementlarni olib tashlang

1. C++ tilida ro‘yxatga elementlar qo‘shish

Quyidagi funksiyalar yordamida roʻyxatga qiymat qoʻshishimiz mumkin:

-push_front() - elementni ro'yxat boshiga kiritadi -push_back() - ro'yxat oxiriga element qo'shadi

Keling, bir misolni ko'rib chiqaylik,

example.cpp
#include <iostream>
#include <list>

using namespace std;

int main() {
    
    // ro'yxat yaratish
    list<int> numbers = {1, 2, 3};
  
    // asl ro'yxatni ko'rsatish
    cout << "Initial List: ";
    for(int number: numbers) {
        cout << number << ", ";
    }
  
    // boshida element qo'shing
    numbers.push_front(0);

    // oxirida element qo'shing
    numbers.push_back(4);

    // o'zgartirilgan ro'yxatni ko'rsatish
    cout << endl << "Final List: ";
    for(int number : numbers) {
        cout << number << ", ";
    }

  return 0;

}

Chiqish

kod
Initial List: 1, 2, 3, 
Final List: 0, 1, 2, 3, 4,

2. Ro‘yxat elementlariga kirish

Quyidagi funksiyalar yordamida ro‘yxat elementlariga kirishimiz mumkin:

-front() - ro'yxatning birinchi elementini qaytaradi -back() - ro'yxatning oxirgi elementini qaytaradi

Keling, bir misolni ko'rib chiqaylik,

example.cpp
#include <iostream>
#include <list>

using namespace std;

int main() {

    // ro'yxat yaratish
    list<int> numbers = {1, 2, 3, 4, 5};
  
    // 
    cout << "First Element: " << numbers.front() << endl;
  
    // oxirgi elementni ko'rsatish
    cout << "Last Element: " << numbers.back();
  
    return 0;
    
}

Chiqish

kod
First Element: 1
Last Element: 5

3. Ro‘yxat elementlarini o‘chirish

Biz roʻyxat elementlarini quyidagi funksiyalar yordamida oʻchirib tashlashimiz mumkin:

-pop_front() - ro'yxat boshida joylashgan elementni olib tashlaydi -pop_back() - ro'yxat oxiridagi elementni olib tashlaydi

Mana bir misol,

example.cpp
#include <iostream>
#include <list>

using namespace std;

int main() {
    // ro'yxat yaratish
    list<int> numbers = {1, 2, 3, 4, 5};
 
    // asl ro'yxatni ko'rsatish
    cout << "Inital List: ";
    for(int number : numbers) {
        cout << number << ",  ";
    }

    // ro'yxatning birinchi elementini olib tashlang
    numbers.pop_front();

    // ro'yxatning oxirgi elementini olib tashlang
    numbers.pop_back();

    // o'zgartirilgan ro'yxatni ko'rsatish
    cout << endl << "Final List: ";
    for(int number : numbers) {
        cout << number << ", ";
    }

    return 0;
}

Chiqish

kod
Inital List: 1,  2,  3,  4,  5,  
Final List: 2, 3, 4,

C++ tilidagi boshqa ro'yxat funksiyalari

Ro'yxatlar bilan ishlatilishi mumkin bo'lgan ko'plab funksiyalar mavjud bo'lsa-da, biz faqat quyidagi jadvaldagi ba'zi funksiyalarni ko'rib chiqamiz:

Funksiya tavsifi reverse() Elementlarning tartibini o'zgartiradi. sort() Ro'yxat elementlarini ma'lum tartibda saralaydi. unique() Ketma-ket takrorlanuvchi elementlarni olib tashlaydi. empty() Ro'yxat bo'sh yoki yo'qligini tekshiradi. size() Ro'yxatdagi elementlar sonini qaytaradi. clear() Roʻyxatdagi barcha qiymatlarni oʻchiradi merge() Ikki tartiblangan roʻyxatni birlashtiradi.

Iterator yordamida elementlarga kirish

Belgilangan pozitsiyada ro'yxat elementiga kirish uchun iterators dan foydalanishimiz mumkin. Masalan,

example.cpp
#include <iostream>
#include <list>

using namespace std;

int main() {

     // ro'yxat yaratish
    list<int> numbers = {1, 2, 3, 4, 5};

    // ro'yxatning birinchi elementiga ishora qilish uchun iterator yarating
    list<int>::iterator itr = numbers.begin();
  
    // 2-elementga ishora qilish uchun itr ni oshiring
    ++itr;
    
    // 2-elementni ko'rsatish
    cout << "Second Element: " << *itr << endl;
  
    // 4-elementga ishora qilish uchun itr ni oshiring
    ++itr;
    ++itr;

    // 4-elementni ko'rsatish
    cout << "Fourth Element: " << *itr;
  
    return 0;
}

Chiqish

kod
Second Element: 2
Fourth Element: 4

Yuqoridagi misolda,

  • list<int>::iterator - defines an iterator for a list of int type -numbers.begin() - iteratorni ro'yxatning boshiga ishora qiladigan qilib o'rnatadi

E'tibor bering, biz itr+3; kabi butun sonni qo'shish o'rniga ++itr; -ni qayta-qayta ishlatganmiz.

Buning sababi, iteratorlar oddiy butun sonlar kabi oddiy raqamli qiymatlar emas. Ular konteynerdagi ma'lum xotira joylariga ishora qiladilar. ++ operatori bilan iteratorni oshirish uni konteynerdagi keyingi elementga ishora qiladi.

Iteratorlar haqida ko'proq ma'lumot olish uchun C++ STL Iterators ga tashrif buyuring.

Tez-tez so'raladigan savollar Biz belgilangan joyga element qo'shish uchun insert() funksiyasidan foydalanamiz. Roʻyxat uchun insert() funksiyasi sintaksisi: list_name.insert(iterator, value); Bu yerda, iterator – qiymat kiritilishi kerak boʻlgan joyni koʻrsatadi value – iterator tomonidan koʻrsatilgan pozitsiyaga kiritilishi kerak boʻlgan haqiqiy qiymat Keling, misolni koʻrib chiqaylik, #include <iostream> #include <list> using namespace std; int main() { // create a list list<int> numbers {1, 2, 3}; // display the original list cout<<"Initial List: "; for(int number : numbers) { cout << number << ", "; } // create an iterator to point to the 1st position list<int>::iterator itr = numbers.begin(); // increment the iterator to point to the 3rd position ++itr; ++itr; // insert 0 at the 3rd position of list numbers.insert(itr, 0); // display the modified list cout<<endl<<"Final List: "; for(int number : numbers) { cout << number << ", "; } return 0; } Chiqishning boshlangʻich roʻyxati: 1, 2, 3, List Biz, 2, List, Biz remove() funksiyasi belgilangan pozitsiyada elementni olib tashlash. remove() funksiyasining sintaksisi: list_name.remove(element); remove() funksiyasidan quyidagi ikki usulda foydalanish mumkin: Qiymatni iterator yordamida ishlatish 1. #include <iostream> #include <list> using namespace std; int main() { // create a list list<int> numbers {1, 2, 1, 3, 4, 1}; // display the original list cout << "Initial List: "; for(int number : numbers) { cout << number << ", "; } // remove all the elements with value 1 numbers.remove(1); // display the modified list cout << endl << "Final List: "; for(int number : numbers) { cout << number << ", "; } return 0; } qiymatini ishlatib remove() Chiqish Boshlang‘ich ro‘yxati: 1, 2, 1, 3, 4, 1, Yakuniy ro‘yxat: 2, 3, 4, 2XDEX Inputer yordamida olib tashlash. Roʻyxat: 0, 1, 2, 3, 4, 5, 3, Yakuniy roʻyxat: 0, 1, 2, 4, 5, Bu yerda biz toʻrtinchi elementda faqat remove() funksiyasidan foydalangan boʻlsak ham, qiymati 3 boʻlgan ikkala element ham oʻchiriladi. Buning sababi, remove() funksiyasi iterator tomonidan ko'rsatilgan element bilan bir xil qiymatga ega bo'lgan barcha elementlarni olib tashlaydi.

Shuningdek oʻqing