Compartilhar via


Iterators

As facilidades STL faça uso difundido de iteradores mediar entre vários algoritmos e as seqüências no qual elas atuam.O nome de um tipo de iterador (ou seu prefixo) indica a categoria de iteradores necessária para esse tipo.Para aumentar a energia, as categorias são resumidas aqui como:

  • Saída.Um iterador de saída X só pode ter um valor de V armazenado indireta, após o qual ele deve ser incrementada antes do próximo repositório, como no (*X+ + = V), (*X = V, + +X), ou (*X = V, X+ +).

  • Entrada.Um iterador de entrada X pode representar um valor singular que indica o final da seqüência.Se um iterador de entrada não comparar igual ao seu valor final de seqüência, ele pode ter um valor V acessados indireta nele qualquer número de vezes, como em (V = *X).Passar para o próximo valor ou o final da seqüência, incrementá-lo, como no + +X, X+ +, ou (V = *X+ +).Depois que você incrementa qualquer cópia de um iterador de entrada, nenhuma das outras cópias podem com segurança ser comparadas, dereferenced ou incrementado daí em diante.

  • Encaminhar.Um iterador direta X pode tomar o lugar de um iterador de entrada para leitura ou de um iterador de saída para gravação.Você pode, no entanto, ler (por meio de V = *X) o que você acabou de escrever (por meio de *X = V) por meio de um iterador de encaminhamento.Você também pode fazer várias cópias de um iterador direta, cada um deles pode ser a sua referência cancelada e incrementada de forma independente.

  • Bidirecional.Um iterador bidirecional X pode tomar o lugar de um iterador de encaminhamento.Você pode, no entanto, também decrementar um iterador bidirecional, como em –X, X–, ou (V = *X–).

  • Acesso aleatório.Um iterador de acesso aleatório X pode tomar o lugar de um iterador bidirecional.Você também pode executar muito o mesmo inteiro aritmético em um iterador de acesso aleatório que é possível em um ponteiro de objeto.For N, an integer object, you can write xN,x + N,x - N, and N + X.

Observe que um ponteiro de objeto pode levar o lugar de um iterador de acesso aleatório ou qualquer outro iterador.Todos os iteradores podem ser atribuídos ou copiados.Eles são considerados objetos simplificados e geralmente são passados e retornados por valor, não por referência.Observe também que nenhuma das operações descritas anteriormente pode lançar uma exceção quando executada em um iterador válido.

A hierarquia de categorias do iterador pode ser resumida, mostrando três seqüências.Para acessar somente gravação uma seqüência, você pode usar qualquer uma das:

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

Seta para a direita significa "pode ser substituído por." Qualquer algoritmo de chamadas para obter um iterador de saída deve funcionar bem com um iterador direta, por exemplo, mas não ao contrário.

Para acesso somente leitura a uma seqüência, você pode usar qualquer uma das:

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

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

Finalmente, para acesso de leitura/gravação para uma seqüência, você pode usar qualquer uma das:

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

Um ponteiro de objeto sempre pode servir como um iterador de acesso aleatório, portanto, ele pode servir como qualquer categoria de iterador se ele oferece suporte o acesso de leitura/gravação adequadas para a seqüência em que ele designa.

Um iterador Iterator diferente de um objeto ponteiro também deverá definir os tipos de membro necessários para a especialização iterator_traits<Iterator>.Observe que esses requisitos podem ser atendidos derivando Iterator da classe base pública iterador.

Este "algebra" dos iteradores é fundamental para praticamente tudo na Standard Template Library.É importante entender as promessas e limitações de cada categoria do iterador para ver como os iteradores são usados por contêineres e os algoritmos da STL.

ObservaçãoObservação

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

Visual C++agora oferece verificado iteradores e iteradores de depuração para garantir que você não substitua os limites de seu recipiente.Para obter mais informações, consulte Iteradores selecionados e Depurar iterador suporte.

Consulte também

Referência

Standard Template Library

Segurança do thread na biblioteca C++ padrão