Biblioteca padrão C ++ - C++ Standard Library

Na linguagem de programação C ++ , a C ++ Standard Library é uma coleção de classes e funções , que são escritas na linguagem central e parte do próprio C ++ ISO Standard.

Visão geral

A C ++ Standard Library fornece vários contêineres genéricos, funções para usar e manipular esses contêineres, objetos de função, strings e fluxos genéricos (incluindo E / S interativa e de arquivo), suporte para alguns recursos de linguagem e funções para tarefas diárias, como encontrar o quadrado raiz de um número. A Biblioteca Padrão C ++ também incorpora a maioria dos cabeçalhos da biblioteca padrão ISO C terminando com ".h", mas seu uso está obsoleto. Nenhum outro cabeçalho na Biblioteca Padrão C ++ termina em ".h". Os recursos da C ++ Standard Library são declarados no std namespace .

A C ++ Standard Library é baseada nas convenções introduzidas pela Standard Template Library (STL) e foi influenciada por pesquisas em programação genérica e desenvolvedores da STL, como Alexander Stepanov e Meng Lee. Embora a C ++ Standard Library e o STL compartilhem muitos recursos, nenhum deles é um superconjunto estrito do outro.

Um recurso digno de nota da Biblioteca Padrão C ++ é que ela não apenas especifica a sintaxe e a semântica dos algoritmos genéricos, mas também impõe requisitos ao seu desempenho. Esses requisitos de desempenho geralmente correspondem a um algoritmo bem conhecido, que é esperado, mas não obrigatório. Na maioria dos casos, isso requer tempo linear O ( n ) ou tempo linear O ( n log n ), mas em alguns casos limites superiores são permitidos, como o tempo quasilinear O ( n log 2 n ) para classificação estável (para permitir no local classificação de mesclagem ). Anteriormente, a classificação só era necessária para levar O ( n log n ) em média, permitindo o uso de quicksort , que é rápido na prática, mas tem desempenho de pior caso ruim, mas introsort foi introduzido para permitir desempenho médio rápido e pior complexidade de caso e, a partir do C ++ 11 , a classificação é garantida para ser, no mínimo, linear. Em outros casos, os requisitos permanecem laxer, tais como selecção , que só é necessário para ser linear, em média (como em QuickSelect ), não exigindo pior caso linear como na introselect .

A C ++ Standard Library passou por padronização ISO como parte do esforço de padronização C ++ ISO e está passando por um trabalho adicional com relação à padronização de funcionalidade expandida.

Implementações

Biblioteca padrão GNU C ++ (libstdc ++)

A biblioteca é parte das fontes do GCC [1] e lançada como GPLv3 com uma exceção para vincular a aplicação de código fechado quando construída com o GCC [2] . A versão atual é 11.

Biblioteca Microsoft C ++ Standard (STL)

Na CppCon 2019 em 16 de setembro de 2019, a Microsoft anunciou o lançamento de sua implementação da C ++ Standard Library (também conhecida como STL) como código aberto . Ele está hospedado no GitHub e licenciado pela Apache License 2.0 com LLVM Exception.

Biblioteca padrão Apache C ++

A Apache C ++ Standard Library é outra implementação de código aberto. Foi originalmente desenvolvido comercialmente pela Rogue Wave Software e mais tarde doado à Apache Software Foundation . No entanto, depois de mais de cinco anos sem um lançamento, a diretoria da Apache Software Foundation decidiu encerrar este projeto e movê-lo para o Apache Attic .

Biblioteca padrão LLVM C ++

O projeto LLVM inclui uma implementação da Biblioteca Padrão C ++ chamada libc ++ , com licença dupla sob a Licença MIT e a licença UIUC . Desde a v9.0.0, foi relicenciado para a Licença Apache 2.0 com Exceções LLVM.

Cabeçalhos padrão

Os arquivos a seguir contêm as declarações da Biblioteca Padrão C ++.

Recipientes

<array>
Novo em C ++ 11 e TR1 . Fornece o modelo de classe de contêiner std::array, um contêiner para uma matriz de tamanho fixo.
<bitset>
Fornece a classe de contêiner especializada std::bitset, uma matriz de bits .
<deque>
Fornece o modelo de classe de contêiner std::deque, uma fila dupla .
<forward_list>
Novo em C ++ 11 e TR1 . Fornece o modelo de classe de contêiner std::forward_list, uma lista vinculada individualmente .
<list>
Fornece o modelo de classe de contêiner std::list, uma lista duplamente vinculada .
<map>
Fornece os modelos de classe de contêiner std::mape std::multimap, matriz associativa classificada e multimap .
<queue>
Fornece a classe do adaptador de contêiner std::queue, uma fila de terminação única e std::priority_queueuma fila de prioridade .
<set>
Fornece os modelos de classe de contêiner std::sete std::multisetcontêineres ou conjuntos associativos classificados .
<pilha>
Fornece a classe do adaptador de contêiner std::stack, uma pilha .
<mapa_desordenado>
Novo em C ++ 11 e TR1 . Fornece o modelo de classe recipiente std::unordered_mape std::unordered_multimap, tabelas de hash .
<unordered_set>
Novo em C ++ 11 e TR1 . Fornece o modelo de classe de contêiner std::unordered_sete std::unordered_multiset.
<vetor>
Fornece o modelo de classe de contêiner std::vector, uma matriz dinâmica .

Em geral

<algoritmo>
Fornece definições de muitos algoritmos de contêiner .
<crono>
Fornece elementos de tempo, tais como std::chrono::duration, std::chrono::time_pointe relógios.
<funcional>
Fornece vários objetos de função , projetados para uso com os algoritmos padrão.
<iterator>
Fornece classes e modelos para trabalhar com iteradores .
<memória>
Fornece recursos para gerenciamento de memória em C ++, incluindo o modelo de classe std::unique_ptr.
<stdexcept>
Contém classes de exceção padrão como std::logic_errore std::runtime_error, ambas derivadas de std::exception.
<tuplo>
Novo em C ++ 11 e TR1. Fornece um modelo de classe std::tuple, uma tupla .
<utilidade>
Fornece a classe de modelo std::pair, para trabalhar com pares de objetos ( tuplas de dois membros ), e o namespace std::rel_ops, para facilitar a sobrecarga do operador .

Localização

<locale>
Define classes e declara funções que encapsulam e manipulam as informações peculiares a uma localidade .
<codecvt>
Fornece facetas de conversão de código para várias codificações de caracteres.

Cordas

<string>
Fornece as classes e modelos de string padrão C ++ .
<regex>
Novo em C ++ 11 . Fornece utilitários para strings de correspondência de padrões usando expressões regulares .

Streams e entrada / saída

<fstream>
Fornece recursos para entrada e saída baseada em arquivo. Veja fstream .
<iomanip>
Fornece recursos para manipular a formatação de saída, como a base usada ao formatar inteiros e a precisão dos valores de ponto flutuante .
<ios>
Fornece vários tipos e funções básicas para a operação de iostreams.
<iosfwd>
Fornece declarações de encaminhamento de vários modelos de classe relacionados a E / S.
<iostream>
Fornece fundamentos de entrada e saída de C ++. Veja iostream .
<istream>
Fornece a classe de modelo std::istreame outras classes de suporte para entrada.
<ostream>
Fornece a classe de modelo std::ostreame outras classes de suporte para saída.
<sstream>
Fornece a classe de modelo std::stringstreame outras classes de suporte para manipulação de string.
<streambuf>
Fornece funcionalidade de leitura e gravação de / para certos tipos de sequências de caracteres, como arquivos externos ou strings.

Suporte de linguas

<exceção>
Fornece vários tipos e funções relacionadas ao tratamento de exceções , incluindo std::exceptiona classe base de todas as exceções lançadas pela Biblioteca Padrão.
<limits>
Fornece a classe de modelo std::numeric_limits, usada para descrever propriedades de tipos numéricos fundamentais.
<memory_resource>
Adicionado em C ++ 17 . Fornece recursos para a criação de alocadores de memória polimórfica cujos comportamentos podem mudar em tempo de execução.
<novo>
Fornece operadores newe deleteoutras funções e tipos que compõem os fundamentos do gerenciamento de memória C ++ .
<typeinfo>
Fornece recursos para trabalhar com informações de tipo de tempo de execução C ++ .
<versão>
Adicionado em C ++ 20 . Fornece informações sobre a implementação da biblioteca padrão C ++.

Biblioteca de apoio a Threads

<thread>
Novo em C ++ 11 . Fornece classe e namespace para trabalhar com threads.
<mutex>
Novo em C ++ 11 . 30,4-1. Esta seção fornece mecanismos para exclusão mútua: mutexes, bloqueios e chamada uma vez.
<variável_condição>
Novo em C ++ 11 . 30,5-1. Variáveis ​​de condição fornecem primitivos de sincronização usados ​​para bloquear um encadeamento até que seja notificado por algum outro encadeamento de que alguma condição foi atendida ou até que a hora do sistema seja atingida.
<futuro>
Novo em C ++ 11 . 30.6.1-1. Descreve os componentes que um programa C ++ pode usar para recuperar em um thread o resultado (valor ou exceção) de uma função executada no mesmo thread ou em outro thread.

Biblioteca numérica

Componentes que os programas C ++ podem usar para realizar operações seminuméricas.

<complex>
O cabeçalho <complex> define um modelo de classe e várias funções para representar e manipular números complexos.
<random>
Facilidade para gerar números (pseudo-) aleatórios
<valarray>
Define cinco modelos de classe (valarray, slice_array, gslice_array, mask_array e indirect_array), duas classes (slice e gslice) e uma série de modelos de função relacionados para representar e manipular matrizes de valores.
<numeric>
Operações numéricas generalizadas.

Biblioteca padrão C

Cada cabeçalho da Biblioteca Padrão C está incluído na Biblioteca Padrão C ++ com um nome diferente, gerado removendo o .h e adicionando um 'c' no início; por exemplo, 'time.h' torna-se 'ctime'. A única diferença entre esses cabeçalhos e os cabeçalhos tradicionais da Biblioteca C padrão é que, sempre que possível, as funções devem ser colocadas no std :: namespace. No ISO C, as funções na biblioteca padrão podem ser implementadas por macros , o que não é permitido pelo ISO C ++.

Veja também

Referências

Leitura adicional

links externos