Мазмунга өтүү

Лямбдалар жана функция объекттери

Сабактын башталышы

Лямбдалар жана функция объекттери

Жүрүм-турумду маалымат катары: өткөрүп берүүгө, сактоого жана бириктирүүгө боло турган чакырылуучу нерселер

Негизги идея: заманбап C++ тилинде жүрүм-турумдун бир бөлүгү да маани болуп саналат. Лямбда сизге кичинекей, аты жок функцияны так керек жерде жазууга мүмкүндүк берет; функция объекти (функтор) — бул классы operator() аныктаган объект; ал эми std::function — булардын каалаганын сактай алган универсалдуу кутуча. Чогуу алар алгоритмдерге логиканы өткөрүп берүүгө, кайра чакырууларды каттоого жана кайра колдонулуучу стратегияларды курууга мүмкүндүк берет.
Сабактын аягында сиз төмөнкүлөрдү жасай аласыз:
  • лямбданын толук синтаксисин окуй жана жаза аласыз [captures](params) -> ret { body },
  • өзгөрмөлөрдү маани боюнча, шилтеме боюнча жана баштапкы кармоо аркылуу кармай аласыз,
  • функтор жаза аласыз жана лямбда кантип ага компиляцияланарын түшүндүрө аласыз,
  • каалаган чакырылуучу нерсени std::function ичине сактап, анын баасын биле аласыз.

1. Лямбда деген эмне жана эмне үчүн керек?

Лямбданы көрсөтмө жазылган стикер катары элестетиңиз. Башка жерде толук аталышы бар функция жазып, ага кайрылуунун ордуна, сиз көрсөтмөнү так ошол жерге жазып, ага муктаж болгонго бересиз. Окурман (алгоритм, агым, баскыч) аны кийинчерээк, каалаганча жолу аткара алат.

C++11ге чейин std::sort ге өзүңүздүн иреттөө тартибиңизди берүү үчүн чакыруу ордунан алыс жерде өзүнчө аталыштагы функция же функтор-структура жазууга туура келчү. Бул логиканы чачыратып, окулушту начарлатчу. Лямбда-туюнтма функцияны так ошол саптын ичинде аныктоого мүмкүндүк берет:

#include <algorithm>
#include <vector>

std::vector<int> v = {5, 2, 8, 1};
// Ичине киргизилген компаратор менен КЕМҮҮ боюнча иреттөө:
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });
// эми v = {8, 5, 2, 1}

[](int a, int b) { return a > b; } бөлүгү — бул колдонулган жеринде жазылган толук функция. Анын өзүнчө аты жок; компилятор аны сиз үчүн акырын жаратат.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө