Biblioteca padrão do C++
Em C++, a biblioteca padrão é uma coleção de classes, funções e variáveis escritas na própria linguagem para facilitar o desenvolvimento de aplicações. Também incorpora a biblioteca padrão do C, e todas suas funcionalidades estão declaradas no espaço de nomes std.
A biblioteca padrão do C++ fornece vários containers genéricos, funções que utilizam e manipulam tais containers, funções-objeto, cadeias de caracteres e streams genéricos, suporte para algumas facilidades da linguagem e funções de uso geral, como funções matemáticas. Os containers genéricos são uma implementação de elementos conhecidos em estrutura de dados. Diferentes containers compartilham uma mesma interface, o acesso é o mesmo. A escolha do uso geralmente depende da eficiência em determinadas tarefas que o container deverá desempenhar, o que está relacionado com a implementação interna da classe. Por exemplo, alguns containers são mais eficientes em busca e menos eficientes em inserções. Ela também incorpora a biblioteca padrão do C90. Desta forma, as biblioteca-padrão do C sofreram uma adequação para pertencerem também ao espaço de nomes std: retirou-se o sufixo .h dos nomes dos arquivos de cabeçalho, e adicionou-se o prefixo c para indicar que pertence à linguagem C.
O container std::set<Key, Compare, Alloc> é um conjunto associativo que permite acesso aleatório rápido aos dados. Difere do container std::map pois os valores dos elementos também são suas chaves. Por esse motivo, cada valor (e, portanto, sua chave) é único, não pode repetir. O container pode ser acessado de forma bidirecional, a partir do começo ou do fim. A implementação interna do container geralmente é uma árvore de busca binária. Uma variação do container é o std::multiset, um multiconjunto associativo, que permite valores repetidos. std::stringstream é um manipulador de fluxos de dados de cadeias de caracteres especializado para o tipo de dado nativo char. Ele permite ler e escrever em modo de texto (utiliza-se os operadores de deslocamento de bits, << e >>) ou binário (utiliza-se os métodos read e write para buffers de dado). A biblioteca padrão também fornece classes para casos de uso de std::stringstream somente para leitura (std::istringstream) ou somente para escrita (std::ostringstream).
<algorithm>
Este cabeçalho fornece diversos algoritmos genéricos úteis para busca, ordenação e transformação de containers (estruturas de dados), entre outros. Ele podem ser invocados para diferentes containers através da interface comum dos iteradores, e de operadores específicos que cada algoritmo requisita da estrutura de dado usada. Os algoritmos geralmente são especificados através da posição de começo e de fim da estrutura de dados, e o iterador no final da estrutura deve ser acessível a partir do iterador no começo da mesma estrutura através de seguidos incrementos no iterador. Alguns algoritmos requerem uma condição especial de entrada; por exemplo os algoritmos de busca binária, que requerem uma estrutura de dados já ordenada previamente. Notar entretanto que esse requerimento é implícito e não detectável em tempo de compilação, cabendo a responsalibilidade de atender aos requisitos ao desenvolvedor.
<fstream>
std::fstream é um manipulador de fluxos de dados de arquivos de computador especializado para o tipo de dado nativo char. Ele permite ler e escrever em modo de texto (utiliza-se os operadores de deslocamento de bits, << e >>) ou binário (utiliza-se os métodos read e write para buffers de dado). A biblioteca padrão também fornece classes para casos de uso de std::fstream somente para leitura (std::ifstream) ou somente para escrita (std::ofstream). A implementação de std::fstream segue o padrão RAII. O gerenciamento do arquivo aberto (um recurso do sistema) é de responsabilidade da classe. Isso implica que ao inicializar std::fstream (através de informações como o nome do arquivo e o modo de abertura) o recurso é adquirido, e na destruição de std::fstream o recurso é liberado ao sistema automaticamente. Apesar da biblioteca padrão fornecer o método close para a liberação manual do arquivo ao sistema, o RAII permite que isso seja feito automaticamente quando a instância de std::fstream sai de escopo no programa.
<functional>
Este cabeçalho fornece suporte para funções-objeto, classes que encapsulam funções de forma que a instância da classe possa ser invocada tal qual uma função qualquer. Por exemplo, as funções-objeto são usadas na STL para a passagem de predicados aos algoritmos genéricos de <algorithm>. São disponibilizadas funções-objeto unárias (que demandam um argumento) e binárias (que demandam dois argumentos), adaptadores que permitem converter ponteiros de funções em funções-objeto e adaptadores que permitem converter funções-objeto binárias em unárias ao associar um valor a um dos argumentos. O cabeçalho ainda define algumas funções-objeto de uso geral tais como operações aritméticas e lógicas. Um exemplo é equal_to, uma função-objeto binária que testa se dois valores são iguais. Nada mais é que uma função de comparação genérica encapsulada em uma classe.
<iostream>
Este cabeçalho é responsável pela manipulação de fluxo de dados padrão do sistema (entrada padrão, saída padrão e saída de erros padrão) e representa uma evolução do cabeçalho <stdio.h> da linguagem C. São apresentados os objetos cin, cout, cerr e clog para o envio e recebimento de dados dos fluxos de entrada, saída, erro sem buffer e erro com buffer, respectivamente; para isso usa-se os operadores de deslocamento de bits (<< e >>). Também são fornecidos métodos para a formatação do fluxo de dados, como width, que define uma largura para a saída, fill, que define um caractere específico para ser impresso caso o fluxo é menor que o mínimo esperado, e precision, que define a quantidade de dígitos significativos de números de ponto flutuante.
<locale>
Este cabeçalho manipula diversas convenções culturais do utilizador, como a representação de números, moeda e datas, para efeitos de internacionalização. A biblioteca faz uso da faceta, uma interface para um serviço dum locale específico. Cada locale possui um conjunto de facetas. O construtor padrão da classe std::locale define uma cópia do locale da máquina executando o programa, com as convenções atuais do utilizador.
<map>
O container std::map<Key, Data, Compare, Alloc> é um conjunto associativo ordenado que mapeia um objetos do tipo Key (a chave) em objetos do tipo Data (o valor). As chaves são únicas: se um objeto é inserido com uma chave já existente, o valor presente é substituído pelo valor inserido. O tempo requerido para acesso aleatório a cada elemento é O ( log ( n ) ) {\displaystyle O(\log(n))} , e os iteradores atribuídos não são invalidados após as operações de inserção e remoção. Portanto, a implementação mais usada para o container é a árvore de busca binária auto-balanceada (ainda que qualquer outra estrutura de dados que respeite as restrições de complexidade computacional pode ser usada, como uma skiplist).


