Libreria standard C++
# Libreria standard C++

Nel C++, la libreria standard C++ è una collezione di classi e funzioni, che sono scritte nel linguaggio stesso e sono a loro volta parte dello Standard ISO C++.

La libreria standard C++ fornisce una serie di contenitori generici e di funzioni strutturate per manipolarli, insieme a funzioni oggetti, stringhe e stream generici (utili anche per l'input/output su file o a video), funzioni di supporto alla programmazione e matematiche. La libreria standard C++ incorpora anche la libreria standard ISO C90. Tutte le funzioni e le classi sono dichiarate all'interno del namespace std.

Gli header file nella libreria standard del C++ non hanno l'estensione ".h". Tuttavia, la Libreria Standard del C++ include 18 header file dalla libreria standard del C, che terminano con il ".h". Il loro uso è deprecato e mantenuto solo per retrocompatibilità.

## Esempi

Il linguaggio di programmazione C++ è un linguaggio OOP (object-oriented programming) derivato dal linguaggio C. Il linguaggio C++ ha ereditato dal C la caratteristica che le sue funzioni possono essere definite dall'utente programmatore ed inserite in una libreria. Buona parte delle più importanti funzioni del C++, per esempio quelle di ingresso e uscita, sono contenute in una libreria "standard", suscettibile però di modifica. Per esempio se il programma scritto in C++ deve ricevere e stampare su schermo dei dati esso dovrà contenere nelle definizioni iniziali il file di header iostream; cioè supponendo di voler scrivere il programma Hello world allora bisognerà scrivere:

## Implementazioni

| Nome | Acronimo | Licenza | Ultima versione |
| - | - | - | - |
| GNU C++ Standard Library | libstdc++ | GPLv3 | 11/15/2021 |
| LLVM C++ Standard Library | libc++ | Apache License v2.0 with LLVM Exceptions | 9/30/2021 |
| NVIDIA C++ Standard Library | libcu++ | Apache License v2.0 with LLVM Exceptions | 8/9/2021 |
| Microsoft C++ Standard Library | MSVC STL | Apache License v2.0 with LLVM Exceptions | 12/16/2021 |
| HPX C++ Standard Library for Parallelism and Concurrency | HPX | Boost Software License 1.0 | 8/12/2021 |
| Electronic Arts Standard Template Library | EASTL | BSD 3-Clause License | 10/20/2021 |
| Dinkum C++ Library | | Commerciale | |
| Cray C++ Standard Library | | Commerciale | |

## Header standard

I file seguenti contengono le dichiarazioni della libreria standard C++.

### Generici

**<any>**


    Novità in C++17. Fornisce una classe senza tipo std::any.

**<atomic>**


    Novità in C++11. Fornisce la classe template std::atomic, le sue diverse specializzazioni di modelli e più operazioni atomiche.

**<chrono>**


    Fornisce funzioni per le temporizzazioni, come std::chrono::duration, std::chrono::time_point e orologi. A partire da C++20, le novità aggiunte sono calendari, fusi orari, nuovi orologi e stringhe di formattazione per orari e intervalli.

**<concepts>**


    Novità in C++20. Fornisce la libreria per le concepts.

**<functional>**


    Fornisce diverse funzioni oggetto, realizzate per l'uso con algoritmi standard.

**<memory>**


    Fornisce funzioni per la gestione della memoria in C++, includendo la classe template std::unique_ptr.

**<memory_resource>**


    Novità in C++17. Fornisce facilities for creating polymorphic memory allocators whose behaviors can change at runtime.

**<scoped_allocator>**


    Novità in C++11. Fornisce std::scoped_allocator_adaptor.

**<stdexcept>**


    Contains standard exception classes such as std::logic_error and std::runtime_error, both derived from std::exception.

**<system_error>**


    Novità in C++11. Definisce std::error_code

**<optional>**


    Novità in C++17. Fornisce la classe template std::optional per i tipi opzionali.

**<stacktrace>**


    Novità in C++23. Fornisce le operazioni stack trace.

**<tuple>**


    Novità in C++11 e TR1. Fornisce la classe template std::tuple, una tupla.

**<type_traits>**


    Novità in C++11. Fornisce funzioni di metaprogrammazione per lavorare con i tipi.

**<utility>**


    Fornisce various utilities: class template std::pair (two-member tuples), compile-time integer sequences, helpers in constructing vocabulary types, functions such as std::move and std::forward, and many more. The namespace std::rel_ops for automatically generating comparison operators is deprecated in C++20 in favor of new defaulted comparison operators.

**<variant>**


    Novità in C++17. Fornisce la classe template std::variant, a tagged union type.

### Supporto del linguaggio

**<compare>**


    Novità in C++20. Fornisce il supporto al nuovo operatore a tre vie.

**<coroutine>**


    Novità in C++20. Fornisce il supporto alle coroutine.

**<exception>**


    Fornisce several types and functions related to exception handling, including std::exception, the base class of all exceptions thrown by the Standard Library.

**<initializer_list>**


    Novità in C++11. Fornisce il supporto alle liste di inizializzatori.

**<limits>**


    Fornisce la classe template std::numeric_limits, used for describing properties of fundamental numeric types.

**<new>**


    Fornisce gli operatori new e delete oltre che altre funzioni e tipi, i quali compongono i fondamenti della gestione della memoria in C++.

**<source_location>**


    Novità in C++20. Fornisce capturing source location information as alternative to predefined macros such as __LINE__.

**<typeinfo>**


    Fornisce facilities for working with C++ run-time type information.

**<version>**


    Novità in C++20. Fornisce informazioni riguardo l'implementazione corrente della libreria standard C++.

### Strutture dati

**<array>**


    Novità in C++11 and TR1. Fornisce the container class template std::array, a container for a fixed sized array.

**<bitset>**


    Fornisce the specialized container class std::bitset, a bit array.

**<deque>**


    Fornisce the container class template std::deque, a double-ended queue.

**<forward_list>**


    Novità in C++11 and TR1. Fornisce the container class template std::forward_list, a singly linked list.

**<list>**


    Fornisce the container class template std::list, a doubly linked list.

**<map>**


    Fornisce the container class templates std::map and std::multimap, sorted associative array and multimap.

**<queue>**


    Fornisce the container adapter class std::queue, a single-ended queue, and std::priority_queue, a priority queue.

**<set>**


    Fornisce the container class templates std::set and std::multiset, sorted associative containers or sets.

**<span>**


    Novità in C++20. Fornisce the container adapter class template std::span, a mutable non-owning view that refers to any contiguous range.

**<stack>**


    Fornisce the container adapter class std::stack, a stack.

**<unordered_map>**


    Novità in C++11 and TR1. Fornisce the container class template std::unordered_map and std::unordered_multimap, hash tables.

**<unordered_set>**


    Novità in C++11 and TR1. Fornisce the container class template std::unordered_set and std::unordered_multiset.

**<vector>**


    Fornisce the container class template std::vector, a dynamic array.

### Iteratori e intervalli

**<algorithm>**


    Fornisce definitions of many container algorithms.

**<execution>**


    Fornisce execution policies for parallelized algorithms.

**<iterator>**


    Fornisce classes and templates for working with iterators.

**<ranges>**


    Novità in C++20. Fornisce ranges facilities and lazy evaluated adaptors.

### Localizzazione

**<locale>**


    Definisce classes and declares functions that encapsulate and manipulate the information peculiar to a locale.

**<codecvt>**


    Fornisce code conversion facets for various character encodings. Questo header è deprecato a partire da C++17.

### Stringhe

**<charconv>**


    Novità in C++17. Fornisce a locale-independent, non-allocating, and non-throwing string conversion utilities from/to integers and floating points.

**<format>**


    Novità in C++20. Fornisce a modern way of formatting strings including std::format.

**<string>**


    Fornisce the C++ standard string classes and templates.

**<string_view>**


    Novità in C++17. Fornisce class template std::basic_string_view, an immutable non-owning view to any string.

**<regex>**


    Novità in C++11. Fornisce utilities for pattern matching strings using regular expressions.

### Streams, Files, e Input/Output

**<filesystem>**


    Novità in C++17. Fornisce facilities for file system operations and their components.

**<fstream>**


    Fornisce facilities for file-based input and output. See fstream.

**<iomanip>**


    Fornisce facilities to manipulate output formatting, such as the base used when formatting integers and the precision of floating point values.

**<ios>**


    Fornisce several types and functions basic to the operation of iostreams.

**<iosfwd>**


    Fornisce forward declarations of several I/O-related class templates.

**<iostream>**


    Fornisce le basi per gestire l'input e l'output in C++. Vedere iostream.

**<istream>**


    Fornisce std::istream e altre classi di support per l'input.

**<ostream>**


    Fornisce std::ostream e altre classi di supporto per l'output.

**<spanstream>**


    Novità in C++23. Fornisce std::spanstream and other fixed character buffer I/O streams.

**<sstream>**


    Fornisce std::stringstream and other supporting classes for string manipulation.

**<streambuf>**


    Fornisce reading and writing functionality to/from certain types of character sequences, such as external files or strings.

**<syncstream>**


    Novità in C++20. Fornisce std::osyncstream and other supporting classes for synchronized output streams.

### Libreria di supporto dei thread

**<barrier>**


    Novità in C++20. Fornisce std::barrier, a reusable thread barrier.

**<condition_variable>**


    Novità in C++11. In 32.6-1, condition variables provide synchronization primitives used to block a thread until notified by some other thread that some condition is met or until a system time is reached.

**<future>**


    Novità in C++11. In 32.9.1-1, this section describes components that a C++ program can use to retrieve in one thread the result (value or exception) from a function that has run in the same thread or another thread.

**<latch>**


    Novità in C++20. Fornisce std::latch, a single-use thread barrier.

**<mutex>**


    Novità in C++11. In 32.5-1, this section Fornisce mechanisms for mutual exclusion: mutexes, locks, and call once.

**<shared_mutex>**


    Novità in C++14. Fornisce funzioni per la mutua esclusione condivisa.

**<semaphore>**


    Novità in C++20. Fornisce semafori che modellano un conteggio non negativo delle risorse.

**<stop_token>**


    Novità in C++20. In 32.3.1-1, this section describes components that can be used to asynchronously request that an operation stops execution in a timely manner, typically because the result is no longer required. Such a request is called a stop request.

**<thread>**


    Novità in C++11. Provide class and namespace for working with threads.

### Libreria numerica

Components that C++ programs may use to perform seminumerical operations.

**<bit>**


    Novità in C++20. Fornisce funzioni per la manipolazione dei bit.

**<complex>**


    Definisce a class template std::complex, and numerous functions for representing and manipulating complex numbers.

**<numbers>**


    Novità in C++20. Fornisce mathematical constants defined in namespace std::numbers.

**<random>**


    Novità in C++11. Contiene funzioni per generare numeri e ripartizioni (pseudo-)casuali.

**<ratio>**


    Novità in C++11. Fornisce compile-time rational arithmetic based on class templates.

**<valarray>**


    Definisce five class templates (std::valarray, std::slice_array, std::gslice_array, std::mask_array, and std::indirect_array), two classes (std::slice and std::gslice), and a series of related function templates for representing and manipulating arrays of values.

**<numeric>**


    Per le operazioni numeriche generalizzate.

### Libreria standard del C

Ogni intestazione della libreria standard C è inclusa nella libreria standard C++ con un nome diverso, generata rimuovendo il .h e aggiungendo una "c" all'inizio; ad esempio, 'time.h' diventa 'ctime'. L'unica differenza tra queste intestazioni e le tradizionali intestazioni della Libreria standard C è che, ove possibile, le funzioni dovrebbero essere collocate nello spazio dei nomi std::. In ISO C, le funzioni nella libreria standard possono essere implementate da macro, cosa che non è consentita da ISO C++.

