STL алгоритмдери жана итераторлору
Циклдин коду азыраак, ниет ачыгыраак
<algorithm> ичиндеги алгоритмдер ишти аткарат. Итераторлор - желим: std::sort итераторлор менен гана сүйлөшкөндүктөн, ошол эле алгоритм vector да, array да, кадимки Си массиви да үстүнөн иштейт.
- контейнер / итератор / алгоритм бөлүнүшүн түшүндүрүү,
- жарым ачык
[begin, end)диапазонун туура колдонуу, - итератордун беш категориясын жана ар бири эмнеге уруксат берерин атоо,
sort,find,count_if,transformжанаaccumulateлямбдалар менен чакыруу,- C++20дун
rangesошол эле кодду кыскараак жана коопсузураак кылган жерлерди тааныу.
1. Бирге туташкан үч бөлүк
STLге чейин ар бир тапшырма үчүн өзүнчө цикл жазчу элеңиз: бири иреттөө үчүн, экинчиси издөө үчүн, үчүнчүсү кошуу үчүн. STL муну кайра колдонула турган бөлүктөргө ажыратат. std::sort сыяктуу алгоритм кантип иреттөөнү билет, бирок маалымат кайда жатканын билбейт. Итератор - көрсөткүчкө окшош кичине объект: элементти окуу үчүн аны *it аркылуу баштапкы маанисине жеткиресиз, ++it аркылуу алдыга жылдырасыз. std::vector сыяктуу контейнер сизге итераторлорду begin() жана end() аркылуу берет.
Пайдасы - кайра колдонуу: алгоритмди бир жолу жазыңыз, ал туура түрдөгү итераторду сунуштаган каалаган контейнер менен иштейт. Ошондуктан STL кичине көрүнөт, бирок ушунчалык көп нерсени жасайт.