Lambda ifodalari misollar bilan. Yuqori darajadagi funktsiyalar va lambdalar


Download 37.33 Kb.
bet8/17
Sana25.10.2023
Hajmi37.33 Kb.
#1720034
1   ...   4   5   6   7   8   9   10   11   ...   17
Bog'liq
Lambda ifodalari misollar bilan

Natija:
5
n o'zgaruvchisi qiymat bilan aniqlanganligi sababli, lambda ifodasi chaqirilgandan keyin uning qiymati 0 bo'lib qoladi. O'zgaruvchan spetsifikatsiya lambda ifodasi ichida n ni o'zgartirishga imkon beradi.
Garchi lambda ifodasi faqat avtomatik saqlash muddati bo'lgan o'zgaruvchilarni olishi mumkin bo'lsa-da, siz lambda ifodasi tanasida statik saqlash muddati bo'lgan o'zgaruvchilardan foydalanishingiz mumkin. Quyidagi misolda vektor obyektining har bir elementiga qiymat belgilash uchun generatsiya funksiyasi va lambda ifodasidan foydalaniladi. Lambda ifodasi keyingi elementning qiymatini olish uchun statik o'zgaruvchini o'zgartiradi.
bo'shliqni to'ldirish vektori (vektor & v) ( // Mahalliy statik o'zgaruvchi. static int nextValue = 1; // Quyidagi chaqiruvda paydo bo'ladigan lambda ifodasi // yaratish funktsiyasi mahalliy statikni o'zgartiradi va ishlatadi// o'zgaruvchi keyingiValue. yaratish(v.begin(), v.end(), (keyingi qiymat++ni qaytarish; )); )
Qo'shimcha ma'lumot olish uchun bo'limga qarang.
Quyidagi kod misoli oldingi misoldagi funksiyadan foydalanadi va generator_n STL algoritmi bilan misol lambda ifodasini qo'shadi. Ushbu lambda ifodasi vektor ob'ektining elementini oldingi ikki elementning yig'indisiga belgilaydi. Mutable kalit so'z lambda ifodasi tanasiga lambda ifodasi tomonidan olingan x va y tashqi o'zgaruvchilarning tegishli nusxalarini qiymat bo'yicha o'zgartirishga ruxsat berish uchun ishlatiladi. Lambda ifodasi asl x va y o'zgaruvchilarni qiymat bo'yicha ushlaganligi sababli, lambda ifodasi bajarilgandan keyin ularning qiymatlari 1 bo'lib qoladi.
NextValue++; ))) // OGOHLANTIRISH: bu mavzu uchun xavfsiz emas va faqat tasvir uchun ko'rsatilgan) int main() ( // Vektordagi elementlar soni. const int elementCount = 9; // Har bir element 1 ga o'rnatilgan vektor ob'ektini yarating. vektor v(elementlar soni, 1); // Bu o'zgaruvchilar vektorning oldingi ikkita elementini ushlab turadi. int x = 1; int y = 1; // Vektordagi har bir elementni yig'indisiga o'rnatadi// oldingi ikkita element. gener_n(v.begin() + 2, elementCount - 2, [=]() oʻzgaruvchan otish () -> int ( // lambda 3-parametrdir// Joriy qiymat yaratish. int n = x + y; // Oldingi ikkita qiymatni yangilang. x=y; y=n; qaytish n; ))) chop etish ( "vektor v lambda bilangener_n() ga qo'ng'iroq qilgandan keyin:",v); // x va y mahalliy o'zgaruvchilarni chop eting. // x va y qiymatlari boshlang'ich qiymatlarini ushlab turadi, chunki // ular qiymat bo'yicha qo'lga olinadi. cout<< "x: " << x << " y: " << y << endl; // Vektorni raqamlar ketma-ketligi bilan to'ldiring fillVector(v); chop etish ( "vektor v fillVector() ga birinchi qo'ng'iroqdan keyin: ",v); // Vektorni keyingi raqamlar ketma-ketligi bilan to'ldiring fillVector(v); chop etish ( "vektor v fillVector() ga ikkinchi qo'ng'iroqdan keyin: ",v); )

Download 37.33 Kb.

Do'stlaringiz bilan baham:
1   ...   4   5   6   7   8   9   10   11   ...   17




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling