delete obj.second; }
Kompilyator klass shabloni uchun turlarni avtomatik aniqlamaydi, shuning uchun ham uni mustaqil ko’rsatishimiz zarur.
45. To’g’ridan-to’g’ri o’rin almashtirish algoritmi uchun klass yozing va misol yordamida uning ishlishini tushuntirib bering.
46. Qidiruv algoritmining klasslar yordamida ifodalanishini misollar yordamida tushuntirib bering.
47. Shablonlarning standart kutubxonasi va undan dastur yozishda foydalanishga misollar keltiring?
Kompilyatorlar tarkibida shablonlar kutubxonasini taqdim etadi. (Standart Template Library). Bu kutubxona bir qancha funksiya va klass shablonlaridan tashkil topgan.
Masalan, ikki bog’lamli ro’yxat klassi (list), “juft” klassi (pair), ikki o’zgaruvchining o’rnini almashtirish funktsiyasi shabloni (swap), saralash funksiyalari, massivni dinamik kengaytirish funksiyasi (vector) va h.k. Bulardan dasturlashda to’liq foydalanishingiz mumkin.
Misol uchun std::vector ni olamiz:
48. Функция параметрлари асосида шаблон параметрларини аниқлаш.
Umuman olganda, my_swap funksiyasini burchakli qavsda turni ko’rsatmasdan turib chaqirish mumkin. Kompilyator turni o’zi hosil qiladi.
Turni ko’rsatmasdan funksiyani chaqirish:
int a = 5;
int b = 10;
my_swap (a, b);
Bu yerda funksiya o’z parametrlariga mos ma’lumot turini qayta ishlaydi. Bu deducing template arguments (argumentlarni chiqarib tashlash) deb ataladi. Yuqoridagilarga asoslangan holda murakkabroq misol uchun shablon funksiyasini yozamiz. Masalan, massiv elementlarini saralash dasturi uchun (bunda “pufaksimon” saralash usulidan foydalanamiz). Tabiiyki, saralash algoritmi barcha massivlar uchun bir xil, lekin massivdagi elementlar turi farq qiladi. elementlar o’rnini almashtirish uchun yuqoridagi my_swap funksiyasidan foydalanamiz.
#include
template < typename T >
void my_swap (T &first, T &second) {
T temp(first); //vaqtincha parametr turga tegishli
first = second;
second = temp; }
template
void bubbleSort(ElementType *arr, size_t arrSize) {
for(size_t i=0; i
for(size_t j=0; j
if (arr[j+1]
my_swap (arr[j], arr[j+1]); }
template
void out_array (const ElementType *arr, size_t arrSize) {
for (size_t i=0; i
std::cout<
std::cout<
int main () {
const size_t n=5 ;
int arr1[n]={10, 5, 7, 3, 4};
double arr2[n]={7.62, 5.56, 38.0, 56.0, 9.0};
std::cout<<"Kirish massivlari:\n" ;
out_array (arr1, n);
out_array (arr2, n);
bubbleSort (arr1, n);
bubbleSort (arr2, n);
std::cout <<"Saralangan massivlar:\n" ;
out_array (arr1, n);
out_array (arr2, n);
}
49. Statik ma’lumotlar tuzilmasi: To’plam, massiv tuzilmalariга таъриф беринг, улардан дастурлашда фойдаланишга оид мисоллар келтиринг;
1-ta’rif: Kompyuter xotirasida bevosita ketma-ket joylashadigan, elementlari bir turga tegishli bo’lib, ularga murojaat indeksi bo’yicha amalga oshiriladigan tuzilma massiv deyiladi.
|