• Endi lambda funktsiyasini korib chiqamiz
  • Biz ozgaruvchilarni lambda funktsiyasi doirasiga otkazishimiz mumkin
  • "original" EMAS
  • Muhim eslatma
  • Standart funktsiyani ko'rib chiqing




    Download 293,8 Kb.
    bet4/7
    Sana19.01.2024
    Hajmi293,8 Kb.
    #141255
    1   2   3   4   5   6   7
    Bog'liq
    Ibrohimova Sumayya Hamza qizi

    Standart funktsiyani ko'rib chiqing:
    int a=5;


    void Func()
    {
    cout << "Hello World! " <}


    int main()
    {
    Func();
    return 0;
    }
    Ko'rib turganingizdek, Func() funksiyasi asosiy funktsiyadan OUTSIDE deb e'lon qilingan va ushbu hujjatning barcha global o'zgaruvchilari unga ko'rinadi, masalan int a=5;.
    Endi lambda funktsiyasini ko'rib chiqamiz:
    uning sintaksisi quyidagicha:
    [/*видимые переменные*/](/*аргументы*/)
    {
    //тело функции
    };


    Например:
    auto pf=[]()
    {
    cout << "Hello World! "<< endl;
    };
    pf1();


    auto pf2=[](int b)
    {
    cout << "Hello World! b="< };
    pf2(10);
    Ikkala holatda ham biz pf.. bufer ko'rsatgichidan foydalandik, lekin siz usiz ham qila olasiz.
    Endi o'zgaruvchilarning ko'rinishi bilan bog'liq eng muhim nuqta shundaki, biz funktsiyani main ichida chaqirsak ham, aslida uning ko'rish zonasi (konteksti) bu funktsiyadan tashqarida, ya'ni. u birinchi misoldagi Func() funksiyasiga yaqin, u global o‘zgaruvchilarni ko‘ra oladi, lekin u O‘ZIDA asosiy funksiya ichida mahalliy o‘zgaruvchilarni ko‘rmaydi.Unga mahalliy o‘zgaruvchilarni “ko‘rsatish” uchun quyidagi usullardan foydalanishingiz mumkin:
    int a=5;


    int main()
    {
    int c=10;
    auto pf2=[&c]()
    {
    cout << "Hello World! a=" <holda biz LOKAL o'zgaruvchilarni O'zgartira olmaymiz.
    qiymati bo'yicha mutable auto kalit so'zi bilan pf2=[c]()mutable
    Bu holda biz LOCAL o'zgaruvchilarni O'ZGARTIRISH MUMKIN!!! "original" EMAS
    biz qismni havola bo'yicha va qisman qiymat bo'yicha o'tkazishimiz mumkin, ularni vergul bilan ajratamiz
    biz yuqorida yozilgan barcha o'zgaruvchilarni auto pf2=[&]() havolasi yordamida qabul qilishimiz mumkin.
    yuqorida yozilgan barcha o'zgaruvchilarni auto pf2=[=]() qiymati bo'yicha olishimiz mumkin.
    sinf ichida bu klassni this auto pf2=[this]() kalit so‘zi yordamida belgilashingiz mumkin.
    Muhim eslatma: funktsiya anonim bo'lsa-da va go'yoki asosiy funktsiya ichida yozilgan bo'lsa-da, uning konteksti (ko'rinish zonasi) yuqorida, "global ko'rinish zonasida" joylashgan, shuning uchun kod
    int main()
    {
    int c=10;
    [=]()
    {
    cout << "Hello World! a=" < return 0;
    }
    U faqat "Yakuniy kod" ni ko'rsatadi, chunki Funktsiya chaqiruvi yo'q edi, biz faqat uni amalga oshirishni yozdik, lekin chaqirmadik.
    Yuqorida aytib o'tilganidek, polimorf o'ram shaklida buferdan foydalanish shart emas, ba'zi hollarda (masalan, uni boshqa funktsiyaga argument sifatida o'tkazishda) darhol lambda funktsiyasini yozishingiz mumkin.
    Masalan:
    int a=5;


    void Func_in_func(function Function)
    {
    cout<< "Call func in func"< Function();
    }


    int main()
    {
    int c=10;


    Func_in_func([=]()
    {
    cout << "Hello World! a=" <Download 293,8 Kb.
    1   2   3   4   5   6   7




    Download 293,8 Kb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Standart funktsiyani ko'rib chiqing

    Download 293,8 Kb.