C++ Standard Kütüphanesi
C++ Standard Kütüphanesi, C++ programlama dilinde ve C++ ISO Standard'ıyla yazılmış sınıfların ve fonksiyonların koleksiyonudur.
Genel bakış
C++ Standard Kütüphanesi pek çok jenerik tutucu (veri yapısı gerçeklenimi, konteynır), bu tutucular üzerinde işlem yapmaya yarayan fonksiyon, fonksiyon nesnesi, jenerik string ve akış, dil destek özellikleri ve sık kullanılan bazı fonksiyonlar sağlar.
C++ Standard Kütüphanesi, Standard Template Library (STL) baz alınarak geliştirildi ve jenerik programlama araştırmalarından ve STL'in geliştiricileri Alexander Stepanov[1][2] C++ Standard Kütüphanesi ile STL pek çok ortak özellik barındırsa da birbirlerinin aynısı değildir.[]
ve Meng Lee'den izler taşır.C++ Standard Kütüphanesi'nin kayda değer özelliklerinden bir tanesi, jenerik algoritmaların sözdizim ve anlamının yanında, performans gereksinimlerini de belirlemesidir. Bu gereksinimler çoğu zaman iyi bilinen bir algoritmaya karşılık gelir ama bu, o algoritmanın kullanılmasını gerektirmez. Çoğu durumda lineer O(n) veya lineeritmik O(n log n) zamanlı gereksinimlerdir ama O(n log2 n) zamana da izin verilebilir.
C++ Standard Kütüphanesi, 1990lardan itibaren C++ ISO Standardizasyon çabası çerçevesinde ISO standardizasyonuna tabi tutulmuştur. 2011 sonrasında genişletilmiş ve her üç yılda bir[3] C++ standardıyla birlikte güncellenmektedir.
Gerçeklenimleri
Ad | Organizasyon | Anasayfa | Kısaltma | Lisans | En son sürüm |
---|---|---|---|---|---|
GNU C++ Standard Library | GNU Projesi and Free Software Foundation | [1] | libstdc++ | GPLv3 with GCC Runtime Library Exception | Her yıl |
LLVM C++ Standard Library | LLVM Developer Group | [2] | libc++ | Apache License 2.0 with LLVM Exceptions | Her 2 haftada |
NVIDIA C++ Standard Library | Nvidia | [3] | libcu++ | Apache License 2.0 with LLVM Exceptions | 15 Mart 2023 | )
Microsoft C++ Standard Library | Microsoft | [4] | MSVC STL | Apache License 2.0 with LLVM Exceptions | Her gün |
HPX C++ Standard Library for Parallelism and Concurrency | STELLAR Group | [5] | HPX | Boost Software License 1.0 | 29 Mayıs 2024 | )
Electronic Arts Standard Template Library | Electronic Arts | [6] | EASTL | BSD lisansları | 9 Haziran 2023 | )
Dinkum C++ Library | Dinkumware | [7] | Bilinmiyor | Ticari | Bilinmiyor |
Cray C++ Standard Library | Cray User Group | [8] | Bilinmiyor | Ticari | Bilinmiyor |
Geliştirmesi devam etmeyenler
Apache C++ Standard Library
Apache C++ Standard Library bir başka açık kaynak gerçeklenimdir. En başta Rogue Wave Software tarafından ticari olarak geliştirmış, sonrasında Apache Yazılım Vakfı'na bağışlanmıştır.[4] Ancak beş sene kadar yeni bir yayın yapmadı ve Apache Yazılım Vakfı yönetimi projeyi sonlandırma kararı aldı ve rafa kaldırdı.[5]
Ayrıca bakınız
Aşağıdaki kütühaneler C++ Standard Kütüphanesi'nin büyük bir bölümünü gerçekler:
Name | Homepage | Description |
---|---|---|
Abseil | [9] | Google tarafından geliştirilen açık kaynaklı bir kütüphane seti |
Folly | [10] | Facebook tarafından yaygın olarak kullanılan çeşitli C++14 kütüphaneleri |
Bareflank Support Library | [11] | Herşeyi derleme zamanında çalıştırabilen bir C++ kütüphanesi |
Standard modüller
Modüllerin C++20 ile tanıtılmasından, C++23 standardına kadar standard kütüphane modülleri için destek bulunmamaktadır. İsimlendirilmiş modüller, modüllerden önce başlık dosyalarıyla dahil edilen global ve std
isim alanındaki tüm bildirimleri kolayca dahil etmeye yarar.
std
std
isim alanında başlık dosyalarında bulunan tüm yapıları sağlar.std.compat
std
isimlendirilmiş modulünün getirdiklerinin yanı sıra global isim alanında tanımlanmış C kütüphanesindeki yapıları da sağlar.
Standard başlıklar
Aşağıdaki dosyalar C++ standart kütüphanesinin bildirimlerini içerir.
Genel
<any>
- C++17 ile eklendi. Silinmiş-tür sınıf
std::any
'i sağlar. <atomic>
- C++11 ile eklendi. Sınıf şablon
std::atomic
ve onun pek çok özelleştirmeleri ile atomik operasyonları sağlar. <chrono>
std::chrono::duration
,std::chrono::time_point
ve saat yapısı gibi zaman yapılarını sağlar. C++20 ile birlikte; takvim, zaman dilimi, daha fazla saat (clock), string chrono formatlama ve pek çok zamansal özellik eklendi.<concepts>
- C++20 ile eklendi. concepts esas kütüphanesini sağlar.
<expected>
- C++23 ile eklendi. Bir dönüş-türü olan
std::expected
şablon sınıfını sağlar. <functional>
- Standard algoritmalarla kullanılmak için tasarlanmış pek çok fonksiyon nesnesini sağlar.
<generator>
- C++23 ile eklendi. Range'ler ile birlikte çalışmayı da destekleyen coroutine üreticisini sağlar.
<memory>
- Sınıf şablon
std::unique_ptr
'ın da içinde bulunduğu bellek yönetimi için kolaylıklar sağlar. <memory_resource>
- C++17 ile eklendi. Davranışları çalışma zamanında değişebilen çokbiçimli (polimorfik) bellek tahsiscileri (memory allocator) oluşturmak için olanaklar sağlar.[6]
<optional>
- C++17 ile eklendi. Türün bir değere sahip olup olmadığını modelleyen bir seçim türü olan
std::optional
sınıf şablonunu sağlar. <scoped_allocator>
- C++11 ile eklendi.
std::scoped_allocator_adaptor
sınıf şablonunu sağlar. <stacktrace>
- C++23 ile eklendi. Hata ayıklama yaparken kullanılabilecek fonksiyon çağrılarını gösteren yığın yapısı işlevlerini sağlar.
<stdexcept>
std::logic_error
vestd::runtime_error
gibistd::exception
sınıfından türetilmiş standard harici durum sınıflarını bulundurur.<system_error>
- C++11 ile eklendi.
std::error_code
sınıfını tanımlar. <tuple>
- C++11 ve TR1 ile eklendi. Heterojen tür tutucusu olan
std::tuple
şablon sınıfını sağlar. <type_traits>
- C++11 ile eklendi. Türlerle çalışmayı kolaylaştıran metaprogramlama araçlarını sağlar.
<utility>
- Sınıf şablonu
std::pair
(iki elemanlı tuple), derleme zamanı tamsayı dizileri,std::move
,std::forward
gibi fonksiyonları ve çok daha fazlasını sağlar. <variant>
- C++17 ile eklendi. Bir tagged union türü olan
std::variant
sınıf şablonunu sağlar.
Dil desteği
<compare>
- C++20 ile eklendi. Üç-yönlü karşılaştırma operatörü desteği sağlar.
<coroutine>
- C++20 ile eklendi. coroutine desteği sağlar.
<exception>
- Sıradışı durum yönetimi ile ilgili tür ve fonksiyonları sağlar.
<initializer_list>
- C++11 ile eklendi. İlk değer atama listesi desteği sağlar.
<limits>
- Temel nümerik türlerin özelliklerini açıklayan
std::numeric_limits
sınıf şablonunu sağlar. <new>
new
vedelete
operatörleri ile C++ hafıza yönetiminde kullanılan diğer fonksiyon ve türleri sağlar.<source_location>
- C++20 ile eklendi.
__LINE__
gibi makrolara alternatif olarak kaynak kod hakkında, kod satırı numarası ve sütünunun yeri, fonksiyon adı, dosya adı hakkında bilgi sağlar. <stdfloat>
- C++23 ile eklendi. Genişletilmiş floating-point türleri sağlar.
<typeinfo>
- Çalışma zamanı tür bilgisi desteği sağlar.
<version>
- C++20 ile eklendi. C++ standard kütüphanesinin gerçeklenim durumu hakkında bilgi sağlar.[7]
Tutucu türler
<array>
- C++11 ve TR1 ile eklendi. Sabit boyutlu (uzunluğu derleme zamanında bilinen) dizi olan sınıf şablonu
std::array
'i sağlar. <bitset>
- Bit için özelleştirilmiş sınıf
std::bitset
'i sağlar. Bit türü için dizi yapısıdır. <deque>
- Çift yönlü kuyruk (double-ended queue) gerçeklenimi olan
std::deque
sınıf şablonunu sağlar. <flat_map>
- C++23 ile eklendi. Bir konteynır adaptör sınıf şablonu olan
std::flat_map
vestd::flat_multimap
'i sağlar. <flat_set>
- C++23 ile eklendi. Konteyner adaptör sınıf şablonu olan
std::flat_set
vestd::flat_multiset
'i sağlar. <forward_list>
- C++11 ve TR1 ile eklendi. Bağlı liste gerçeklenimi olan
std::forward_list
sınıf şablonunu sağlar. <list>
- Çift yönlü liste (doubly linked list) gerçeklenimi olan
std::list
sınıf şablonunu sağlar. <map>
- Sıralı ilişkili dizi (associative array) yapısı gerçeklenimi olan
std::map
vestd::multimap
sınıf şablonlarını sağlar.
<mdspan>
- C++23 ile eklendi.
std::span
'e benzer şekilde fakat çok boyutlu (multi dimensional) olanstd::mdspan
sınıf şablonunu sağlar. <queue>
- Tek yönlü kuyruk yapısı gerçeklenimi olan
std::queue
vestd::priority_queue
adaptör sınıflarını sağlar. <set>
- Sınıf şablonu
std::set
vestd::multiset
'i sağlar. <span>
- C++20 ile eklendi. Bitişik aralıklar için sahip olmayan (non-owning) bir görünüm (view) türü olan, sınıf şablonu
std::span
'ı sağlar. <stack>
- Bir yığın verı yapısı gerçeklenimi olan std::stack adaptör sınıfını sağlar.
<unordered_map>
- C++11 ve TR1 ile eklendi. Karma tablosu veri yapısı gerçeklenimi olan
std::unordered_map
vestd::unordered_multimap
şablon sınıflarını sağlar. <unordered_set>
- C++11 ve TR1 ile eklendi.
std::unordered_set
vestd::unordered_multiset
sınıf şablonlarını sağlar. <vector>
- Dinamik (boyu çalışma zamanında değişebilen) dizi veri yapısı gerçeklenimi olan
std::vector
şablon sınıfını sağlar.
İteratör'ler ve Range'ler
<algorithm>
- Range ve tutucularla kullanılabilecek pek çok algoritma tanımı sağlar.
<execution>
- C++17 ile eklendi. Paralelleştirilmiş algoritmalar için çalıştırılma yöntemleri tanımlar.
<iterator>
- İteratör'lerle çalışan sınıf ve şablonları sağlar.
<numeric>
- Genelleştirilmiş nümerik algoritmalar sağlar.
<ranges>
- C++20 ile eklendi. Range ve tembel değerlendirilme adaptörleri sağlar.
Lokalizasyon
<codecvt>
- Çeşitli karakter kodlamaları için kod dönüştürme yönleri sağlar. Bu başlık C++17 ile kullanımdan kaldırıldı.
<locale>
- Çeşitli karakter kodlamalarını işlemek veya değiştirmeye yarayan sınıf ve fonksiyon tanımlarını bulundurur.
<text_encoding>
- C++26 ile eklendi. Metin kodlama (text encoding) tanımları sağlar.
String
<charconv>
- C++17 ile eklendi. Tam ve reel sayılar için string'e/string'ten dönüşüm araçları sağlar.
<format>
- C++20 ile eklendi.
std::format
gibi string biçimlendirme araçları sağlar. <string>
- C++'ın standard string sınıf ve şablonlarını barındırır.
<string_view>
- C++17 ile eklendi. Herhangi bir string için değiştirilemez ve aitlik almayan görüş türü (non-owning view) olan sınıf şablonu
std::basic_string_view
'i tanımlar. <regex>
- C++11 ile eklendi. Düzenli ifade kullanılarak string örüntü eşleştirme araçlarını sağlar.
Akışlar, Dosyalar ve Giriş/Çıkış
<filesystem>
- C++17 ile eklendi. Dosya sistemi işlemleri ve bileşenleriyle ilgili kolaylıklar sağlar.
<fstream>
- Dosya tabanlı giriş ve çıkış kolaylıkları sağlar.
<iomanip>
- Çıkış biçimini şekillendiren araçlar sağlar. Örneğin, bir sayı çıkışa gönderilecekken kaç tabanında gösterileceği belirlenebilir.
<ios>
- Akış işlemleri için pek çok temel tür ve fonksiyon sağlar.
<iosfwd>
- Giriş/çıkış sağlayan pek çok sınıf şablonu için önbildirim sağlar.
<iostream>
- C++ için temel giriş çıkış operasyonlarını sağlar.
<istream>
std::istream
'i ve diğer girişle ilgili sınıfları sağlar.<ostream>
std::ostream
'i ve diğer çıkışla ilgili sınıfları sağlar.<print>
- C++23 ile eklendi. Hem C, hem de C++ çıkış akışını destekleyen
std::print
gibi araçları bulundurur. <spanstream>
- C++23 ile eklendi.
std::spanstream
ve diğer sabit karakter tampon (buffer) G/Ç akışlarını sağlar. <sstream>
std::stringstream
string manipülasyon sınıflarını sağlar.<streambuf>
- Dosya ve string'lere belirli karakter türü dizileri şeklinde okuma yazma işlevselliği sağlar
<syncstream>
- C++20 ile eklendi.
std::osyncstream
'i ve senkronize edilmiş çıkış akışları için destekleyici sınıfları sağlar.
Thread destek kütüphanesi
<barrier>
- C++20 ile eklendi. Bir yeniden kullanılabilir thread (iş parçacığı) bariyeri olan
std::barrier
'ı sağlar. <condition_variable>
- C++11 ile eklendi. Koşul değişkenleri, thread'de (veya bir başka thread'de) bir koşulun oluştuğu bildirilene kadar veya belli sistem zamanına ulaşıncaya dek, thread'in çalışmasını durdurmaya yarayan eşzamanlama öğelerini (synchronization primitives) sağlar.
<future>
- C++11 ile eklendi. Thread'de çalışan bir fonksiyonun sonucuna (bu bir değer veya sıradışı durum olabilir) ulaşmayı sağlayan yapıları barındırır.
<hazard_pointer>
- C++26 ile eklendi. Paylaşılmış veriye karşılıklı hariç tutma (mutux) ve kilit (lock) kullanmadan erişmeyi sağlayan
std::hazard_pointer
yapısını sağlar. <latch>
- C++20 ile eklendi. Tek kullanımlık thread bariyeri olan
std::latch
'i sağlar. <mutex>
- C++11 ile eklendi. Mutex, lock, call_once gibi karşılıklı hariç tutma (mutual exclusion) yapılarını sağlar.
<rcu>
- C++26 ile eklendi. Oku-kopyala-güncelle (read-copy-update) mekanizmalarını sağlar.
<shared_mutex>
- C++14 ile eklendi. Paylaşımlı karşılıklı hariç tutma yapısı sağlar.
<semaphore>
- C++20 ile eklendi. Kaynak sayısını modelleyerek paylaşılmış kaynaklara thread erişimini kısıtlayan semaphore yapısını kısıtlayan kaynak sayısını modelleyen sunar.
<stop_token>
- C++20 ile eklendi. Eşzamansız olarak (asynchronously) bir işleve belli bir zamanda çalışmayı durdurma isteğinde bulunma yapılarını barındırır. Böylesi bir istek, durdurma isteği (stop request) olarak adlandırır.
<thread>
- C++11 ile eklendi. Thread'lerle çalışma isim alanını ve sınıfını sağlar.
Nümerik kütüphanesi
C++ programlarının yarı sayısal işlemler gerçekleştirmek için kullanabileceği bileşenler:
<bit>
- C++20 ile eklendi. Bit işleme araçları sağlar.
<complex>
- Sınıf şablonu olan
std::complex
'i ve çeşitli karmaşık sayı operasyonlarını tanımlar. <numbers>
- C++20 ile eklendi.
std::numbers
isim alanı altında matematik sabitleri sağlar. <random>
- C++11 ile eklendi. (Gerçekmiş gibi görünen (pseudo-)) Rassal sayı üretimi ve dağılımları ile ilgili yapıları tanımlar.
<ratio>
- C++11 ile eklendi. Derleme zamanı rasyonel aritmatik tabanlı sınıf şablonlarını sağlar.
<valarray>
- Sayı dizilerini ifade etmek ve işlemler yapmak için,
std::valarray
,std::slice_array
,std::gslice_array
,std::mask_array
vestd::indirect_array
sınıf şablonları ilestd::slice
vestd::gslice
sınıflarını ve bunlarla ilgili fonksiyon şablonlarını sağlar.
C Standard Kütüphanesi
C Standard Kütüphanesi'nin her bir başlık dosyası C++ Standard Kütüphanesi'nde .h uzantısı kaldırılmış ve önüne 'c' getirilmiş olarak bulunur. Mesela 'time.h', 'ctime' olarak görünür. Bu başlık dosyalarıyla C Standard Kütüphanesi arasındaki tek fark, fonksiyonların std::
isim alanında bulunmasıdır. ISO C'de, standart kütüphane fonksiyonlarının makro kullanılarak gerçeklenmesine izin verilir, ancak ISO C++'ta buna izin verilmez.
Ayrıca bakınız
- Boost (C++ Kütüphanesi)
- C POSIX library
- C standard kütüphanesi
Kaynakça
- ^ Bjarne Stroustrup (1994). The Design and Evolution of C++ §8.5. Addison Wesley. ISBN 0-201-54330-3.
- ^ Alexander Stepanov, Meng Lee (1 Ağustos 1994). "The Standard Template Library". HP Labs. 9 Kasım 1997 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Ekim 2017.
- ^ "C++ IS Schedule 5 Mayıs 2024 tarihinde Wayback Machine sitesinde arşivlendi.", Herb Sutter
- ^ "Apache C++ Standard Library". 8 Nisan 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mayıs 2024.
- ^ Brett Porter (18 Temmuz 2013). "Apache C++ Standard Library and the Attic". stdcxx-dev mailing list. 23 Temmuz 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Şubat 2014.
- ^ Filipek, Bartlomiej. "Polymorphic Allocators, std::vector Growth and Hacking" (İngilizce). 29 Haziran 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Nisan 2021.
- ^ "Working Draft, Standard for Programming Language C++" (PDF). open-std.org. ISO/IEC. 1 Nisan 2020. s. 492. 27 Nisan 2020 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 30 Nisan 2021.
Konuyla ilgili yayınlar
- Stroustrup, Bjarne (2013). The C++ Programming Language. Addison-Wesley. ISBN 978-0321563842.
- Josuttis, Nicolai (2012). The C++ Standard Library – A Tutorial and Reference. Addison-Wesley. ISBN 978-0-321-62321-8.
- Van Weert, Peter; Gregoire, Marc (14 Haziran 2016). C++ Standard Library Quick Reference. Apress. ISBN 978-1484218754. 16 Mayıs 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Mart 2017.
Dış bağlantılar
- C++ Standard Library reference
- Microsoft C++ Standard Library Reference
- Rogue Wave SourcePro C++ dökümantasyonu
- Apache C++ Standard Library Wiki, retired 15 May 2014 (based on Rogue Wave C++ Standard Library 4.1.0)
- STLport C++ Standard Library dökümantasyonu
- The GNU C++ Library online dökümantasyonu
- LLVM/Clang C++ Standard Library dökümantasyonu