Compartilhar via


Iteradores

As instalações STL fazem broadcast uso dos iteradores negociar entre vários algoritmos e as sequências em que atuam. O nome de um tipo de iterator (ou do prefixo) indica a categoria de iteradores necessários para esse tipo. Em ordem crescente do poder, as categorias são resumidas aqui como:

  • Saída. Um iterador X de saída só pode ter um indireto armazenado V de valor nele, depois da qual deve ser incrementado antes do repositório seguir, como em (* VcriandoX=), (*X = Vcriando,X), ou (*X = V, criando X).

  • Entrada. Um iterador X de entrada pode representar singular um valor que indica o término da sequência. Se um iterador de entrada não compara o igual a seu valor de participante de sequência, pode ter um indireto acessado V de valor nele qualquer número de vezes, como em (V = *X). Para andamento para o valor ou ao fim da seguinte sequência, você incrementar-lo, como em criandoX, criando X, ou (V = *). criandoX Quando você adiciona qualquer cópia de um iterador de entrada, nenhuma das outras cópias com segurança podem ser comparadas, cancelado, ou incrementado depois disso.

  • Para frente. Um iterador para X pode fazer o local de um iterador de saída para gravar ou de um iterador de entrada a serem lidos. É possível, contudo, read (com V = *)Xo que você gravou apenas por meio (*X = V) com um iterador para frente. Você também pode fazer várias cópias de um iterador avançar, cada qual pode ser cancelado e incrementado independente.

  • Bidirecional. Um iterador bidirecional X pode fazer o local de um iterador para frente. Você pode, no entanto, também decrementar um iterador bidirecionalmente, como em --X, X--, ou (V = *X--).

  • De acesso aleatório. Um iterador de acesso aleatório X pode fazer o local de um iterador bidirecional. Você também pode executar muito a mesma aritmética de inteiro em um iterador de acesso aleatório que você pode em um ponteiro de objeto. Para N, um objeto inteiro, você pode escrever x[]N, x + N, x - N, e N + X.

Observe que um ponteiro de objeto pode fazer o local de um iterador de acesso aleatório ou em qualquer outro iterador. Todos os iteradores podem ser atribuídos ou copiado. Deveriam ser objetos leves e frequentemente transmitidos e retornados pelo valor, não por referência. Observe também que nenhuma das operações descritas anteriormente podem gerar uma exceção quando executadas em um iterador válido.

A hierarquia de categorias de iterador pode ser resumida mostrando três sequências. Para acesso somente leitura a um sequência, você pode usar qualquer um dos seguintes:

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Meios de seta para a direita “podem ser substituídos por.” Qualquer algoritmo que chame para um iterador de saída deve funcionar bem com um iterador avançar, por exemplo, mas não em relação à outra forma.

Para acesso somente leitura para uma sequência, você pode usar qualquer um dos seguintes:

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

Um iterador de entrada é o mais fraco de todas as categorias.

Finalmente, para acesso de leitura/gravação para uma sequência, você pode usar qualquer um dos seguintes:

forward iterator
   -> bidirectional iterator
   -> random-access iterator

Um ponteiro de objeto sempre pode servir como um iterador de acesso aleatório, o que pode servir como qualquer categoria de iterador se a suporte ao acesso de leitura/gravação apropriado à sequência que designa.

Um iterador Iterator que não seja um ponteiro de objeto também deve definir os tipos de membro para a especialização iterator_traits<Iterator>. Observe que esses requisitos poderão ser atendidos com Iterator da classe base iteradorpública.

Essa “álgebra” dos iteradores é fundamental praticamente a todo o restante na biblioteca padrão do modelo. É importante entender as promessas e as limitações de cada categoria de iterador de ver como os iteradores são usados por contêineres e por algoritmos em STL.

Dica

Você também pode usar para cada um, no para iterar sobre coleções STL.Para obter mais informações, consulte Como: iterar sobre a coleta de STL com para cada.

Visual C++ agora oferece iteradores verificados e iteradores de depuração assegurar que você não substitui os limites de seu contêiner. Para obter mais informações, consulte Iteradores Verificados e Suporte a Iterador de Depuração.

Consulte também

Referência

Biblioteca de Modelos Padrão

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