Compartilhar via


Contêineres da STL

A Biblioteca do modelo padrão (STL) fornece contêineres para coleções de armazenamento de objetos relacionados. Os contêineres são classes de modelos que permitem a especificação de objetos que são permitidos nos contêineres.

Dica

Este artigo não se aplica ao STL/CLR.Para obter mais informações, consulte Referência da biblioteca STL/CLR..

Os recipientes no STL podem ser divididos em três categorias: recipientes de sequência, recipientes associativos, e adaptadores de recipiente.

Contêineres sequenciais

Contêineres sequenciais mantêm ordem dos elementos inseridos que você especificar.

Um recipiente de vector se comporta como uma matriz, mas pode crescer automaticamente conforme necessário. É de acesso aleatório e armazenado continuamente, e o comprimento é altamente flexível. Por esses e outros motivos, vector é o recipiente preferido de sequência para a maioria dos aplicativos. Para obter mais informações, consulte Classe vector.

Um recipiente de array tem alguns portos fortes de vector, mas o comprimento não é tão flexível. Para obter mais informações, consulte Classe array (STL).

Um recipiente de deque (fila de duas terminações) permite inserções e exclusões rápidas no início e fim do recipiente. Compartilha as vantagens do acesso aleatório e do comprimento flexível de vector, mas não é contínuo. Para obter mais informações, consulte Classe deque.

Um recipiente de list é uma lista duplamente vinculada que permite o acesso bidirecional, inserções rápidas, e exclusões rápidas em qualquer lugar no recipiente, mas você não pode acessar um elemento no contêiner aleatoriamente. Para obter mais informações, consulte Classe list.

Um recipiente de forward_list é uma lista vinculada individualmente/versão voltada para acesso da list. Para obter mais informações, consulte Classe forward_list.

Contêiner associativos

Em recipientes associativos, os elementos são inseridos em uma ordem predefinida, por exemplo, como ascensão classificada. Os contêineres associativos não ordenados também estão disponíveis. Os contêineres associativos podem ser agrupados em dois subconjuntos: mapas e conjuntos.

Um map, às vezes chamado de dicionário, consiste em um par de chaves/valores. A chave é usada para ordenar a sequência e o valor é associado à chave. Por exemplo, um map pode conter chaves que representam cada palavra única em um texto e os valores correspondentes que representam o número de vezes que cada palavra aparece no texto. A versão não ordenada de map is unordered_map. Para obter mais informações, consulte Classe map e Classe unordered_map.

Um set é apenas um recipiente crescente de elementos exclusivos. O valor também é a chave. A versão não ordenada de set is unordered_set. Para obter mais informações, consulte Classe set e Classe unordered_set.

map e set permitem apenas que uma instância de uma chave ou elemento seja inserida no recipiente. Se várias instâncias dos elementos forem necessárias, use multimap ou multiset. As versões não ordenadas são unordered_multimap e unordered_multiset. Para obter mais informações, consulte Classe multimap, Classe unordered_multimap, Classe multiset e Classe unordered_multiset.

Os mapas e os conjuntos ordenados suportam iteradores bidirecionais, e suas contrapartes não ordenadas suportam iteradores dianteiros. Para obter mais informações, consulte Iteradores.

Adaptadores de recipiente

Um adaptador recipiente é uma variação de uma sequência ou contêiner associativo que restringe a interface para fins de simplicidade e clareza. Os adaptadores de recipiente não suportam iteradores.

Um recipiente de queue segue a semântica PEPS (primeiro a entrar, primeiro a sair). O primeiro elemento empurrado- isto é, inserido no fila - é o primeiro a ser exibido- isto é, removido da fila. Para obter mais informações, consulte Classe queue.

Um recipiente de priority_queue é organizado de forma que o elemento que tem o valor mais alto seja sempre o primeiro na fila. Para obter mais informações, consulte Classe priority_queue.

Um recipiente de stack segue a semântica UEPS (última a entrar, primeiro a sair). O último elemento empurrado na pilha é o primeiro elemento exibido. Para obter mais informações, consulte Classe de pilha.

Como os adaptadores de recipiente não suportam iteradores, não podem ser usados com os algoritmos de STL. Para obter mais informações, consulte Algoritmos.

Os requisitos para os elementos do recipiente

Geralmente, os elementos inseridos em um recipiente de STL podem ser praticamente qualquer tipo de objeto se puderem ser copiados. Elementos que podem ser apenas movidos, por exemplo, elementos como vector<unique_ptr<T>> que são criados usando unique_ptr<> funcionarão contanto que você não chame funções de membro que tentem copiá-los.

O destrutor não é permitido para lançar uma exceção.

Os contêineres associativos ordenados, descritos anteriormente neste artigo, devem ter um operador de comparação público definido. (Por padrão, o operador é operator<, mas até mesmo os tipos que não funcionam com operator< são suportados.

Algumas operações em contêiner também podem exigir um construtor padrão e o operador de equivalência público. Por exemplo, recipientes associativos não ordenados exigem suporte para igualdade e hashing.

Acessando elementos de recipiente

Elementos de contêiner são acessados usando iteradores. Para obter mais informações, consulte Iteradores.

Dica

Você também pode usar baseado em intervalo para loops para iterações sobre coleções de STL.

Consulte também

Referência

Biblioteca de Modelos Padrão

<sample container>

Segurança de threads na Biblioteca Padrão C++

Conceitos

Contêineres (C++ moderno)