Skip to content

Ro'yxat (List)

C++ Ro'yxat

Ro'yxat vektorga o'xshab, bir xil turdagi bir nechta elementni saqlashi va dinamik o'sishi mumkin.

Biroq, ro'yxat va vektor o'rtasida ikkita asosiy farq bor:

  1. Ro'yxatning boshiga ham, oxiriga ham element qo'shish va olib tashlash mumkin, vektorlar esa odatda faqat oxiridan qo'shish va olib tashlash uchun optimallashtirilgan.
  2. Vektorlardan farqli o'laroq, ro'yxat tasodifiy kirishni qo'llab-quvvatlamaydi, ya'ni to'g'ridan-to'g'ri muayyan indeksga o'tish yoki elementlarga indeks raqamlari bo'yicha kirish mumkin emas.

Ro'yxatdan foydalanish uchun <list> sarlavha faylini import qilish kerak:

MISOL

cpp
// Ro'yxat kutubxonasini import qilish
#include <list>

Ro'yxat yaratish

Ro'yxat yaratish uchun list kalit so'zini ishlating: list<tur> royxatNomi.

MISOL

cpp
// Satrlarni saqlaydigan cars nomli ro'yxat yaratish
list<string> cars;

E'lon vaqtida elementlar qo'shish uchun:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// Ro'yxat elementlarini chop etish
for (string car : cars) {
  cout << car << "\n";
}

Ro'yxat elementiga kirish

Ro'yxat elementlariga massiv va vektorlardagi kabi indeks raqamlari orqali kirish mumkin emas.

Biroq, birinchi yoki oxirgi elementga .front() va .back() funksiyalari orqali kirish mumkin:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// Birinchi elementni olish
cout << cars.front();  // Volvo chiqaradi

// Oxirgi elementni olish
cout << cars.back();  // Mazda chiqaradi

Ro'yxat elementini o'zgartirish

Birinchi yoki oxirgi elementning qiymatini .front() va .back() funksiyalari orqali o'zgartirish mumkin:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// Birinchi elementning qiymatini o'zgartirish
cars.front() = "Opel";

// Oxirgi elementning qiymatini o'zgartirish
cars.back() = "Toyota";

cout << cars.front(); // Endi Volvo o'rniga Opel chiqaradi
cout << cars.back();  // Endi Mazda o'rniga Toyota chiqaradi

Ro'yxatga element qo'shish

.push_front() bilan boshiga va .push_back() bilan oxiriga element qo'shish mumkin:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// Boshiga element qo'shish
cars.push_front("Tesla");

// Oxiriga element qo'shish
cars.push_back("VW");

Ro'yxatdan element olib tashlash

.pop_front() bilan boshidan va .pop_back() bilan oxiridan element olib tashlash mumkin:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// Birinchi elementni olib tashlash
cars.pop_front();

// Oxirgi elementni olib tashlash
cars.pop_back();

Ro'yxat hajmi

.size() funksiyasi yordamida ro'yxatdagi elementlar sonini bilish mumkin:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.size();  // 4 chiqaradi

Ro'yxat bo'sh yoki yo'qligini tekshirish

.empty() funksiyasi ro'yxat bo'sh bo'lsa 1 (true), bo'lmasa 0 (false) qaytaradi:

MISOL

cpp
list<string> cars;
cout << cars.empty();  // 1 chiqaradi (ro'yxat bo'sh)

Ro'yxat bo'ylab tsikl

Ro'yxat elementlari bo'ylab an'anaviy for tsiklida indeks bilan aylanish mumkin emas. Eng oddiy usul — for-each tsikli:

MISOL

cpp
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

for (string car : cars) {
  cout << car << "\n";
}

MASLAHAT

Iterator yordamida ham ro'yxatlar bo'ylab aylanish mumkin.