|
Tasodifiy kirish iteratori
|
bet | 5/7 | Sana | 07.12.2023 | Hajmi | 183,4 Kb. | | #112976 |
Bog'liq Ma\'lumotlarMustaqilIshElmurodovSardorbekTasodifiy kirish iteratori elementga uning raqami bo'yicha to'g'ridan-to'g'ri kirish imkonini beradi. Oddiy misol - oddiy massiv yoki vektor.
Kirish iteratori ketma-ket doimiy iteratorning maxsus holatidir. Uning yuqoridagi turlardan muhim farqi shundaki
Agar i ga jii!=j dan erishish mumkin bo'lsa, u holda umumiy holatda faqat i haqiqiy, lekin j emas
Ikki kiritish iteratori odatda teng (va bundan tashqari, bir vaqtning o'zida amal qiladi), agar ular bir iteratorning nusxasi bo'lsa.
Kirish iteratoridan foydalanadigan algoritmlar bir xil iterator qiymatidan ikki marta o'tmasligi kerak, ya'ni. bitta o'tish bo'lishi kerak.
Ushbu xususiyatlar kiritish iteratori, masalan, ma'lumotlar oqimi iteratori bo'lishi mumkinligini eslaganimizda ayon bo'ladi: iteratorni oshirish oqimdan keyingi baytni olishni anglatadi va bunda 1) oldingi bayt yo'qoladi va 2) ifoda ++ i ==++ j . ++ i va ++ j har qanday holatda ham ketma-ket bajariladi va agar birinchi iterator i oshirilsa, j endi haqiqiy bo'lmaydi va u uchun oshirish amalining natijasi aniqlanmagan bo'ladi.
Chiqish iteratori ham ketma-ket iteratorning maxsus holatidir. Kirish iteratorining yuqoridagi xususiyatlariga o'xshash xususiyatlarga qo'shimcha ravishda, u yana bir xususiyatga ega: chiqish iteratorini oshirishdan oldin, siz u ko'rsatgan elementga biror narsa yozishingiz kerak, ya'ni. j++;j++ harakatlar ketma-ketligiga ruxsat berilmaydi.
4. Iterator tasnifi
Keling, STL kutubxonasida aniqlangan iteratorlar qanday xususiyatlarga ega ekanligini ko'rib chiqaylik. Alohida ishlab chiqilgan iteratorlar STL bilan mos bo'lishi uchun bir xil xususiyatlarga ega bo'lishi kerak. Eslatib o'tamiz, STL shablonlar kutubxonasi bo'lganligi sababli (ya'ni, shablonlarni yaratish ish vaqtida emas, kompilyatsiya vaqtida sodir bo'ladi), masalan, iteratorning keyingi elementga o'tadigan operatsiyaga ega bo'lish xususiyati (++) faqat agar mavjud bo'lsa iteratorX bo'lsa, X++ ifodasi qonuniydir; lekin bunday funktsiya har doim aniq belgilangan degani emas. X++ ifodasi X int * bo'lganda ham qonuniydir .
Shunday qilib, biz turli xil iterator sinflaridan foydalanishga misollar keltiramiz, so'ngra rasmiy xususiyatlarni - sinflarning "skeletlari" ni keltiramiz.
Eslatma:
Iterator T tipidagi elementlar to'plamining elementlarini takrorlashi kerak. Izohlarda yozilgan bayonot iteratorning har qanday amalga oshirilishi uchun haqiqiy bo'lishi kerakligini ko'rsatadi.
|
| |