Кіріспе

C++ бағдарламалау тілінде қолданылатын кластар мен функциялар жиынтығы.

C++ бағдарламалау тілінде C++ стандартты кітапханасы – негізгі тілде жазылған және C++ ISO стандартының құрамына кіретін кластар мен функциялар жиынтығы.

Шолу

C++ стандартты кітапханасы бірнеше жалпы контейнерлерді, осы контейнерлерді пайдалану және манипуляциялау функцияларын, функциялық объектілерді, жалпы тізбектер мен ағындарды (интерактивті және файлдық I/O-ны қоса алғанда), кейбір тіл мүмкіндіктерін қолдауды және санның квадрат түбірін табу сияқты жиі кездесетін тапсырмалар үшін функцияларды ұсынады. C++ стандартты кітапханасы сонымен қатар ISO C стандартты кітапханасының ".h" аяқталымындағы көптеген заголовоктарын қамтиды, бірақ олардың қолданылуы ескірген (C++23-тен бастап ескіруі алынып тасталды). C++23 осы заголовоктарды C-мен өзара іс-қимыл үшін пайдалы деп есептейді және оларды C және C++ екеуі үшін де жарамды бағдарламалардан тыс қолдануға кеңес бермейді. C++ стандартты кітапханасындағы ешбір заголовок ".h" аяқталымымен бітпейді. C++ стандартты кітапханасының мүмкіндіктері std атау кеңістігінде жарияланады. C++ стандартты кітапханасы Стандартты үлгі кітапханасы (STL) енгізген конвенцияларға негізделген және жалпы бағдарламалаудағы зерттеулермен, сондай-ақ STL-ді әзірлеушілер Александр Степанов пен Менг Лидің ықпалына ие. C++ стандартты кітапханасы мен STL көптеген мүмкіндіктерді бөліссе де, екеуі де бір-бірінің қатаң үстін жабатын жиыны емес. C++ стандартты кітапханасының ерекшелігі – ол жалпы алгоритмдердің синтаксисі мен семантикасын ғана емес, сонымен қатар олардың өнімділігіне қойылатын талаптарды да анықтайды. Бұл талаптар көбінесе белгілі алгоритмге сәйкес келеді, оның қолданылуы күтіледі, бірақ міндетті емес. Көп жағдайда бұл сызықтық уақыт O(n) немесе сызықтық-логарифмдік уақыт O(n log n) талап етеді, бірақ кейбір жағдайларда жоғары шектеулерге рұқсат етіледі, мысалы, тұрақты сұрыптау үшін квазисызықтық уақыт O(n log2 n) (орнында біріктіру сұрыптауын мүмкіндік ету үшін). Бұрын сұрыптау тек орташа жағдайда O(n log n) уақытын қажет еткен, бұл практикада жылдам quicksort-ты қолдануға мүмкіндік берген, бірақ нашар жағдайда нашар өнімділік көрсеткен, бірақ интросорт орташа жағдайда жылдам өнімділікті және ең нашар жағдайдағы оптималды күрделілікті қамтамасыз ету үшін енгізілді, ал C++11 нұсқасынан бастап сұрыптау ең нашар жағдайда сызықтық-логарифмдік уақытқа кепілдік берілген. Басқа жағдайларда талаптар босқа беріледі, мысалы, таңдау, ол тек орташа жағдайда сызықтық болуы керек (quickselect сияқты), introselect-тегідей ең нашар жағдайда сызықтық болмауы керек. C++ стандартты кітапханасы 1990-шы жылдарда C++ ISO стандарттау жұмысының бөлігі ретінде ISO стандартталуынан өтті. 2011 жылдан бері ол әр үш жылда бір рет C++ стандартының әрбір қайта қаралуымен кеңейтіліп, жаңартылып келеді.

Қолданылу

Атауы Ұйым Басты бет Акроним Лицензия Соңғы шығарылым GNU C++ Стандартты кітапхана GNU Project and Free Software Foundation libstdc++ GPLv3 GCC Runtime Library Exception Жаңа үлкен шығарылым жылына бір рет LLVM C++ Стандартты кітапхана LLVM Дамушы тобы libc++ Apache License 2.0 LLVM Exceptions 2 апта сайын NVIDIA C++ Стандартты кітапхана Nvidia libcu++ Apache License 2.0 LLVM Exceptions 2022 10 12 Microsoft C++ Стандартты кітапхана Microsoft MSVC STL Apache License 2.0 LLVM Exceptions Күнделікті HPX C++ Параллелизм және бірмезгілік үшін стандартты кітапхана STELLAR Group HPX Boost бағдарламалық қамтамасыз ету лицензиясы 1.0 2022 08 06 Electronic Arts Standard Template Library Electronic Arts EASTL BSD 3 Clause License 2021 10 20 Dinkum C++ кітапханасы Dinkumware Лицензиясы белгісіз Коммерциялық белгісіз Cray C++ Стандартты кітапхана Cray User Group Лицензиясы белгісіз Коммерциялық белгісіз

Apache C++ стандартты кітапханасы

Apache C++ Standard Library тағы бір ашық кодты іске асыру болып табылады. Ол бастапқыда Rogue Wave Software компаниясы коммерциялық түрде әзірлеген, кейін Apache Software Foundation-ға сыйға берген. Бірақ, бес жылдан астам уақыт бойы жаңа нұсқасы шықпағаннан кейін, Apache Software Foundation кеңесі осы жобаны тоқтатуға және Apache Attic-ке жылжытуға шешім қабылдады.

Стандартты модульдер

C++20-да модульдер енгізілгеннен бастап C++23-ке дейін стандартты кітапхана модульдеріне қолдау болған жоқ. Бұл аталатын модульдер импортталатын стандартты тақырыптар арқылы ұсынылған global және std атау кеңістіктерінде жарияланған барлық элементтерді қамту үшін қосылды. Макростарды экспорттауға рұқсат жоқ, сондықтан пайдаланушылар қолдану үшін макростарды шығаратын тақырыптарды қолмен қосуға немесе импорттауға тиіс. Бұл модульдер C кітапханасының мүмкіндіктерін қоса алғанда, импортталатын C++ кітапханасының тақырыптары арқылы ұсынылған std атау кеңістігіндегі және жаһандық сақтауды бөлу және босату функцияларындағы барлық жарияланымдарды экспорттайды (әлі де стандартты атау кеңістігінде жарияланған). Аталған модуль std сияқты бірдей жарияланымдарды экспорттайды, сонымен қатар C кітапханасының мүмкіндіктеріндегі жаһандық атау кеңістігіндегі функцияларды да экспорттайды.

Стандартты тақырыптар

Келесі файлдар C++ стандартты кітапханасының жарияланымдарын қамтиды.

Жалпы

C++17-де жаңа. `std::any` түрін жою арқылы сыныпты ұсынады. C++11-де жаңа. `std::atomic` кластық үлгісін, оның бірнеше арнайы үлгілерін және көптеген атомдық операцияларды қамтамасыз етеді. `std::chrono::duration`, `std::chrono::time_point` және сағаттар сияқты уақыт элементтерін ұсынады. C++20-дан бастап, уақыт бойынша көптеген мүмкіндіктер қосылды: күнтізбелер, уақыт белдеулері, қосымша сағаттар және жол арқылы хроно пішімдеу. C++20-да жаңа. Негізгі кітапхана тұжырымдамаларын ұсынады. C++23-те жаңа. `std::expected` кластық үлгісін, нәтиже түрін ұсынады. Стандартты алгоритмдермен қолдануға арналған бірнеше функциялық объектілерді ұсынады. C++23-те жаңа. Диапазондардағы ішкі `yield` операцияларын қолдайтын корутина генераторын қамтамасыз етеді. C++-та жадты басқару құралдарын ұсынады, соның ішінде `std::unique_ptr` кластық үлгісі. C++17-де жаңа. Орындалу кезінде мінез-құлқы өзгертілетін полиморфты жад бөлушілерді жасауға мүмкіндік береді. C++17-де жаңа. `std::optional` кластық үлгісін, қатысуға болатын түрін ұсынады. C++11-де жаңа. `std::scoped_allocator_adaptor` ұсынады. C++23-те жаңа. Стектік іздеу операцияларын қамтамасыз етеді. `std::logic_error` және `std::runtime_error` сияқты стандартты ерекшелік кластарын қамтиды, екеуі де `std::exception` класынан туындаған. C++11-де жаңа. `std::error_code` анықталды. C++11 және TR1-де жаңа. `std::tuple` кластық үлгісін, топтаманы ұсынады. C++11-де жаңа. Типтермен жұмыс істейтін метапрограммалау мүмкіндіктерін ұсынады. Әртүрлі қосымша құралдарды ұсынады: `std::pair` (екі мүшелі топтамалар) кластық үлгісі, компиляция уақытындағы бүтін сандар тізбектері, сөздік типтерді құруға көмектесетін құралдар, `std::move` және `std::forward` сияқты функциялар және тағы да көптеген мүмкіндіктер. C++20-да салыстыру операторларын автоматты түрде жасау үшін `std::rel_ops` кеңестігі жаңа дефолтты салыстыру операторлары пайдалы болғандықтан қолданылмайды. C++17-де жаңа. `std::variant` кластық үлгісін, тегтелген біріктірілген түрін ұсынады.

Тілдік қолдау

C++20-да жаңа. Үш жолды салыстыру операторын қолдауды қамтамасыз етеді. C++20-да жаңа. Корутиналарды қолдауды қамтамасыз етеді. Ерекшеліктерді өңдеуге қатысты бірнеше типтер мен функцияларды ұсынады, оның ішінде std::exception – Стандартты кітапханадан туындаған барлық ерекшеліктердің негізгі класы. C++11-де жаңа. Бастаушы тізімдерді қолдауды қамтамасыз етеді. Негізгі сандық типтердің қасиеттерін сипаттау үшін қолданылатын std::numeric_limits кластық шаблонын ұсынады. Операторлар new және delete, сондай-ақ C++ жад басқаруының негізін құрайтын басқа функциялар мен типтерді ұсынады. C++20-да жаңа. LINE сияқты алдын ала анықталған макростардың орнына дереккөз орнын анықтау ақпаратын ұсынады. C++23-де жаңа. Кеңейтілген қалқыма нүкте типтеріне шартты қолдауды қамтамасыз етеді. C++ орындалу кезіндегі тип туралы ақпаратпен жұмыс істеуге мүмкіндіктер береді. C++20-да жаңа. C++ стандартты кітапханасының іске асырылуы туралы ақпарат ұсынады.

Контейнерлер

C++11 және TR1-де жаңа. std::array контейнерлік сынып үлгісін, белгілі бір өлшемдегі массивге арналған контейнерді ұсынады. std::bitset арнайы контейнерлік класы біттік массивді қамтамасыз етеді. std::deque контейнерлік сынып үлгісі екі жақты кезек ұсынады. C++23-те жаңа. std::flat_map және std::flat_multimap контейнер адаптері класының үлгілерін ұсынады. C++23-те жаңа. std::flat_set және std::flat_multiset контейнер адаптері класының үлгілерін ұсынады. C++11 және TR1-де жаңа. std::forward_list контейнерлік сынып үлгісі, бір байланысты тізімді ұсынады. std::list контейнерлік сынып үлгісі, екі байланысты тізімді ұсынады. std::map және std::multimap контейнерлік сынып үлгілері, сұрыпталған ассоциативтік массив және мультимассивті ұсынады. C++23-те жаңа. std::mdspan кластық үлгісі, std::span-ға ұқсас, бірақ көрініс көп өлшемді. std::queue контейнер адаптер класы, бір жақты кезек және std::priority_queue, басымдық кезегін ұсынады. std::set және std::multiset контейнерлік сынып үлгілері, сұрыпталған ассоциативтік контейнерлер немесе жиынтықтарды ұсынады. C++20-да жаңа. std::span кластық үлгісі, кез келген үзділіссіз диапазонға сілтеме жасайтын, меншігі жоқ көріністі ұсынады. std::stack контейнер адаптер класы, стек ұсынады. C++11 және TR1-де жаңа. std::unordered_map және std::unordered_multimap контейнерлік сынып үлгісі, хэш кестелерін ұсынады. C++11 және TR1-де жаңа. std::unordered_set және std::unordered_multiset контейнерлік сынып үлгісін ұсынады. std::vector контейнерлік сынып үлгісі, динамикалық массивді ұсынады.

Итераторлар мен диапазондар

Контейнерлермен және басқа да диапазонмен қолдануға болатын көптеген алгоритмдердің анықтамаларын ұсынады. C++17 нұсқасында жаңадан қосылды. Параллельдеуге арналған алгоритмдер үшін орындау саясатын ұсынады. Итераторлармен жұмыс істеуге арналған сыныптар мен шаблонды ұсынады. Жалпыланған сандық алгоритмдер. C++20 нұсқасында жаңадан қосылды. Диапазон мүмкіндіктерін және кейіннен бағаланатын адаптерлерді ұсынады.

Жергілікті жер

Түрлі таңба кодтамаларын түрлендіру мүмкіндіктерін ұсынады. Бұл қанаты C++17 нұсқасынан бастап қолданылмайды. Сыныптарды анықтайды және нақты локальге тән ақпаратты қамтитын және басқаратын функцияларды жариялайды. C++26 нұсқасында жаңадан қосылды. Мәтіндік кодтауды анықтау мүмкіндіктерін ұсынады.

Таспалар

C++17-де жаңа. Бөліп бермейтін, жергілікті параметрларға тәуелсіз және қате шығармайтын бүтін сандар мен қозғалатын нүктелі сандарды жолға айналдыру және жолдан сандарға айналдыру құралдарын ұсынады. C++20-да жаңа. std::format-ты қоса алғанда, жолдарды форматтаудың қазіргі заманғы тәсілін ұсынады. C++ стандартты жол кластары мен шаблонды ұсынады. C++17-де жаңа. std::basic_string_view кластық шаблонын ұсынады, ол кез келген жолға иелік етпейтін, өзгеріссіз көрініс болып табылады. C++11-де жаңа. Жүйелі өрнектерді пайдаланып жолдарда үлгілерді іздеуге арналған құралдарды ұсынады.

Ағыстар, файлдар және кіріс/шығыс

C++17-де жаңа. Файл жүйесімен жұмыс істеу және оның құрамдас бөліктері үшін мүмкіндіктер ұсынады. Файлға негізделген деректерді енгізу және шығару үшін мүмкіндіктер береді. Fstream бөліміне қараңыз. Шығару форматын реттеуге мүмкіндік береді, мысалы, бүтін сандарды форматтау кезінде қолданылатын сан жүйесін және қалқыма нүктелі мәндердің дәлдігін өзгертуге болады. I/O ағындарының жұмыс істеуіне қажетті бірнеше типтер мен негізгі функцияларды ұсынады. I/O операцияларымен байланысты бірнеше класс шаблонды алдын ала жариялайды. C++ кіріс-шығыс негіздерін ұсынады. Iostream бөліміне қараңыз. std::istream және деректерді енгізу үшін басқа да көмекші классстарды ұсынады. std::ostream және деректерді шығару үшін басқа да көмекші классстарды ұсынады. C++23-те жаңа. C және C++ ағындары үшін қолдау көрсетілетін std::print сияқты форматталған шығару құралдарын ұсынады. C++23-те жаңа. std::spanstream және басқа да белгілі бір мөлшердегі таңбалық буферлермен жұмыс жасайтын I/O ағындарын ұсынады. std::stringstream және жолдарды өңдеуге арналған басқа да көмекші классстарды ұсынады. Сыртқы файлдар немесе жолдар сияқты таңбалар тізбектерінің белгілі бір түрлерінен деректерді оқу және жазу мүмкіндігін қамтамасыз етеді. C++20-да жаңа. std::osyncstream және синхронды шығару ағындары үшін басқа да көмекші классстарды ұсынады.

Сызықтарды қолдау кітапханасы

C++20-да жаңалық. std::barrier, қайта пайдалануға болатын жіп кедергісін ұсынады. C++11-де жаңалық. 32.6 1-де шартты айнымалылар, басқа бір жіп қандай да бір шарт орындалғанда немесе жүйелік уақыт жеткенше жіпті тоқтатуға арналған синхрондау примитивтерін ұсынады. C++11-де жаңалық. 32.9.1 1-де бұл бөлім C++ бағдарламасының бір жіпте немесе басқа жіпте орындалған функциядан нәтижені (мәнді немесе ерекшелікті) алуға арналған компоненттерін сипаттайды. C++26-да жаңалық. std::hazard pointer-ді ұсынады. C++20-да жаңалық. std::latch, бір рет пайдаланылатын жіп кедергісін ұсынады. C++11-де жаңалық. 32.5 1-де осы бөлімде өзара құлыптау механизмдері қарастырылған: мутекстер, құлыптар және бір рет шақыру. C++26-да жаңалық. Оқу-жаңарту механизмдерін ұсынады. C++14-те жаңалық. Ортақ құлыптау мүмкіндігін ұсынады. C++20-да жаңалық. Теріс емес ресурс санын модельдейтін семафорды ұсынады. C++20-да жаңалық. 32.3.1 1-де осы бөлім операцияны уақтылы тоқтатуды асинхронды түрде сұрауға арналған компоненттерді сипаттайды, әдетте нәтиже енді қажет болмағандықтан. Мұндай сұрау тоқтату сұрауы деп аталады. C++11-де жаңалық. Жіптермен жұмыс істеуге арналған сыныптар мен атау кеңістіктерін ұсынады.

Сандар жиыны

C++ бағдарламаларында жартылай сандық операцияларды орындау үшін қолданылатын компоненттер. C++20-да жаңадан қосылды. Биттік операцияларды жүзеге асыру мүмкіндігін ұсынады. std::complex кластың шаблонын және күрделі сандарды көрсету және манипуляциялау үшін көптеген функцияларды анықтайды. C++20-да жаңадан қосылды. std::numbers кеңістігінде анықталған математикалық тұрақтыларды қамтамасыз етеді. C++11-де жаңадан қосылды. (Псевдо) кездейсоқ сандар мен таратуларды жасауға арналған құрал. C++11-де жаңадан қосылды. Класс шаблондарына негізделген компиляция уақытындағы рационалды арифметиканы ұсынады. Бес класс шаблонын (std::valarray, std::slice_array, std::gslice_array, std::mask_array және std::indirect_array), екі класты (std::slice және std::gslice) және мәндер массивін көрсету және манипуляциялау үшін байланысты функция шаблондарының сериясын анықтайды.

C стандартты кітапханасы

C стандартты кітапханасының әрбір тақырыбы C++ стандартты кітапханасына әртүрлі атаумен қосылады, ол үшін 'h' әрпі алынып тасталып, басына 'c' әрпі қосылады; мысалы, 'time.h' 'ctime' болады. Бұл тақырыптар мен дәстүрлі C стандартты кітапханасының тақырыптары арасындағы жалғыз айырмашылық – мүмкін болған жағдайда функциялар std:: атау кеңістігіне орналастырылуы тиіс. ISO C стандартында стандартты кітапханадағы функцияларды макростар арқылы іске асыруға рұқсат етіледі, бірақ ISO C++ стандартында мұндайға рұқсат жоқ.