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:
C++ STL list implementation

C++ da STL ro'yxati doubly-linked list data structure ni amalga oshiradi. Natijada, biz oldinga ham, orqaga ham takrorlashimiz mumkin.
Ro'yxatni yaratish uchun dasturimizga list sarlavha faylini kiritishimiz kerak.
#include<list>
Sarlavha faylini import qilgandan so'ng, biz quyidagi sintaksis yordamida ro'yxatni e'lon qilishimiz mumkin:
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 qiymatlarKeling, bir misolni ko'rib chiqaylik,
// 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};
#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
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::listo'rnigalistdan foydalandik, chunkiusing namespace std;yordamida std namespace ni allaqachon aniqlaganmiz.
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:
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,
#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
Initial List: 1, 2, 3,
Final List: 0, 1, 2, 3, 4,
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,
#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
First Element: 1
Last Element: 5
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,
#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
Inital List: 1, 2, 3, 4, 5,
Final List: 2, 3, 4,
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.
Belgilangan pozitsiyada ro'yxat elementiga kirish uchun iterators dan foydalanishimiz mumkin. Masalan,
#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
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'rnatadiE'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