As categorias da biblioteca C ++ padrão

A documentação biblioteca padrão utiliza uma abordagem formal que você vai encontrar difícil de ler e ainda mais difícil de compreender. A melhor maneira de começar é para quebrar a biblioteca padrão em pedaços menores. Você pode categorizar as funções da biblioteca padrão em um número de maneiras. Uma das abordagens mais comuns é a utilização das seguintes categorias:

Containers

Containers funcionam exatamente como os recipientes em sua casa - eles segurar alguma coisa. Por exemplo, ambas as filas e deques são os tipos de recipientes. A categoria Recipientes não contém quaisquer funções, mas contém um número de formas, incluindo a seguinte:

basic_stringbit_vectorbitsetchar_producerdequehashlistmapmultimapmultisetpriority_queuequeueropesetsliststackvector

Iterators

Iterators enumerar alguma coisa. Quando você cria uma lista de itens, em seguida, passar por isso itens lista de verificação off, você está enumerando a lista. Usando iteradores ajuda a criar listas de itens e manipulá-los de maneiras específicas. O tipo de iterador que você cria é importante porque alguns iterators deixá-lo ir para a frente somente, alguns podem ir em qualquer direção, e alguns podem escolher os itens de forma aleatória. Cada tipo de iterador tem sua finalidade específica.

A categoria Iterators inclui um número de tipos. Estes tipos determinam o tipo de iterador que você criar no seu código e as capacidades do que iterador. A seguir está uma lista dos tipos de iterador:

back_insert_iteratorbidirectional_iteratorbidirectional_iterator_tagforward_iteratorforward_iterator_tagfront_insert_iteratorinput_iteratorinput_iterator_taginsert_iteratoristream_iteratoriterator_traitsostream_iteratoroutput_iteratoroutput_iterator_tagrandom_access_iteratorrandom_access_iterator_tagraw_storage_iteratorreverse_bidirectional_iteratorreverse_iteratorsequence_buffer

A biblioteca padrão também inclui uma série de funções específicas de iterador. Estas funções ajudá-lo a executar tarefas como antecedência (incremento) o iterador por um certo número de posições. Você também pode medir a distância entre o início eo fim do iterador. O que se segue é uma lista de funções iteradoras:

advancedistancedistance_typeiterator_categoryvalue_type

algoritmos

algoritmos realizar manipulações de dados, tais como a substituição, localização, ou a triagem de informações. É difícil criar um aplicativo substancial sem o uso de um. Não existem quaisquer tipos na categoria Algoritmos. O que se segue é uma lista de funções do algoritmo:

accumulateadjacent_differenceadjacent_findadvancebinary_searchcopycopy_backwardcopy_ncountcount_ifdistanceequalequal_rangefillfill_nfindfind_endfind_first_offind_iffor_eachgenerategenerate_nincludesinner_productinplace_mergeiotais_heapis_sortediter_swaplexicographical_comparelexicographical_compare_3waylower_boundmake_heapmaxmax_elementmergeminmin_elementmismatchnext_permutationnth_elementpartial_sortpartial_sort_copypartial_sumpartitionpop_heappowerprev_permutationpush_heaprandom_samplerandom_sample_nrandom_shuffleremoveremove_copyremove_copy_ifremove_ifreplacereplace_copyreplace_copy_ifreplace_ifreversereverse_copyrotaterotate_copysearchsearch_nset_differenceset_intersectionset_symmetric_differenceset_unionsortsort_heapstable_partitionstable_sortswapswap_rangestransformuninitialized_copyuninitialized_copy_nuninitialized_filluninitialized_fill_nuniqueunique_copyupper_bound

functors

functors são uma classe especial de objeto que age como se fosse uma função. Na maioria dos casos, você chamar um functor usando a mesma sintaxe que você usa para a função, mas functors possuem todos os bons elementos de objetos, bem como a capacidade de instanciar-los em tempo de execução.

Functores vêm em uma série de formas. Por exemplo, uma função binária functor aceita dois argumentos como entrada e proporciona um resultado como saída. Functores incluem um número de tipos que determinam o tipo de função do código cria:

binary_composebinary_functionbinary_negatebinder1stbinder2nddividesequal_togreatergreater_equalhashidentitylessless_equallogical_andlogical_notlogical_ormem_fun1_ref_tmem_fun1_tmem_fun_ref_tmem_fun_tminusmodulusmultipliesnegatenot_equal_topluspointer_to_binary_functionpointer_to_unary_functionproject1stproject2ndselect1stselect2ndsubtractive_rngunary_composeunary_functionunary_negate

Utilities

Utilities são funções e tipos que executam tarefas de serviço pequenas dentro da biblioteca padrão. As funções são min (), max (), e os operadores relacionais. Os tipos são chart_traits (os traços de caracteres usados ​​em outros recursos de biblioteca padrão, tais como basic_string) e par (Um emparelhamento dos dois valores heterogêneos).

Adaptadores

Adaptadores realizar conversões de uma espécie. Eles tornam possível adaptar um tipo de dados para outro. Em alguns casos, os adaptadores de executar a conversão de dados, tais como números de negando. A categoria Adaptadores inclui uma função, ptr_fun (). Além disso, a categoria Adaptadores inclui os tipos listados aqui:

back_insert_iteratorbinary_composebinary_negatebinder1stbinder2ndfront_insert_iteratorinsert_iteratormem_fun1_ref_tmem_fun1_tmem_fun_ref_tmem_fun_tpointer_to_binary_functionpointer_to_unary_functionpriority_queuequeueraw_storage_iteratorreverse_bidirectional_iteratorreverse_iteratorsequence_bufferstackunary_composeunary_negate

allocators

allocators gerir os recursos, normalmente memória. Na maioria dos casos, você não vai precisar usar os membros da categoria Allocators. Por exemplo, você normalmente criar novos objetos usando o novo operador. o novo operador aloca memória para o objeto e, em seguida, cria-lo chamando o construtor do objeto.

Em casos raros, como quando você deseja implementar uma forma de pool de objetos, você pode querer separar o processo de alocação de memória do processo de construção. Neste caso, você chama construir() para executar a tarefa real de construção do objecto com base na sua definição de classe. A categoria Allocators tem as seguintes funções.

constructdestroyget_temporary_bufferreturn_temporary_bufferuninitialized_copyuninitialized_copy_nuninitialized_filluninitialized_fill_n

A categoria Allocators também inclui um par de tipos. Estes tipos ajudá-lo a gerenciar a memória, e você pode encontrar mais uso para eles do que você vai as funções nesta categoria. Os tipos são

raw_storage_iteratortemporary_buffer

alocadores polimórficas

Ao trabalhar com versões mais antigas da biblioteca padrão, alocadores usadas como argumentos para modelos de criar problemas, porque eles são obrigados por tipo. O que isto significa é que um vetor criado usando std :: vector é um tipo completamente diferente de um vetor criado usando std :: vector, mesmo que um é simplesmente uma extensão do outro.

o myalloc parte do modelo simplesmente define o método usado para alocar a memória-que na verdade não afeta o tipo de dados gerenciados pelo modelo. Assim, em ambos os casos, você é criado um vetor segurar int de dados - os tipos são os mesmos. A única diferença é o método em que a memória é alocada (a primeira utiliza técnicas de alocação de memória padrão, enquanto o segundo usa um alocador customizado).

Usando alocadores polimórficas elimina este problema através da definição de uma classe de memória base abstrata, memory_resource, a ser usado para todos os alocadores de memória. Esta classe abstrata define os seguintes métodos virtuais puros:

allocatedeallocateis_equal ()

menu