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

Диапазондор жана көрүнүштөр (C++20)

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

Диапазондор жана көрүнүштөр (C++20)

Маалыматтарыңыздын үстүнөн курама, жалкоо конвейерлер

Негизги идея: Ranges китепканасы (C++20, <ranges> башкы файлы) маалыматтарды өзгөртүүнү конвейер оператору | менен туташтырылган кичинекей курама кадамдардын конвейери катары сүрөттөөгө мүмкүндүк берет. Ар бир кадам — бул көрүнүш (view): элементтерди кантип чыгарууну сүрөттөгөн жеңил, маалыматка ээ болбогон объект, аларды жалкоо эсептейт — бирден, сиз айланып өткөндө гана. Сиз STL контейнерлерин, итераторлорду, алгоритмдерди жана лямбдаларды билесиз; диапазондор аларды окумдуу конвейерлерге чапташтырып, шаўдуу begin()/end() жуптарын алып салат.
Аягында сиз төмөнкүлөрдү жасай аласыз:
  • диапазон жана көрүнүш эмне экенин, эмне үчүн көрүнүштөр арзан жана жалкоо экенин түшүндүрүү,
  • filter, transform, take жана drop сыяктуу диапазон адаптерлери менен конвейерлерди куруу,
  • диапазон алгоритмин объекттин бир талаасына багыттоо үчүн проекцияны колдонуу,
  • «салаңдаган» көрүнүштөрдөн качуу үчүн ээлик жана жашоо убактысы жөнүндө ой жүгүртүү.

1. Итератор жуптарынан диапазондорго

Классикалык STL алгоритмдери итератор жубун кабыл алат. Контейнерди чыпкалоо, өзгөртүү жана басып чыгаруу үчүн begin()/end(), аралык контейнерлер жана кол менен жазылган циклдер менен алектенесиз:

// классикалык C++17: үч өтүү, бир убактылуу вектор
std::vector<int> evens;
std::copy_if(v.begin(), v.end(), std::back_inserter(evens),
             [](int n){ return n % 2 == 0; });
std::vector<int> squared;
std::transform(evens.begin(), evens.end(), std::back_inserter(squared),
               [](int n){ return n * n; });

Диапазон — бул жөн эле айланып өтө турган нерсе: ал begin() жана end() сунуштайт. Ар бир стандарттык контейнер — диапазон. C++20 std::ranges мейкиндигине чектелген алгоритмдерди кошот, алар бүтүндөй диапазонду бир аргумент менен кабыл алат, ошондуктан жуп жоголот:

std::ranges::sort(v);          // sort(v.begin(), v.end()) ордуна
auto n = std::ranges::count(v, 42);

Андан да чоң пайда — китепкананын көрүнүштөр бөлүгү, ал ошол эки кол цикли бирдиктүү декларативдик конвейерге айландырат.

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

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

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

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