Como obter informações em C ++ Usando um Random Access Iterator
A maioria dos contentores permitem executar acesso aleatório dos dados que eles contêm. Por exemplo, a Acesso aleatório exemplo mostra que é possível criar um iterator e em seguida, adicionar ou subtrair o offset atual para obter valores dentro do recipiente que iterator suporta:
#incluir#incluir usando namespace std-int main () {vector Words-Words.push_back("Blue")-Words.push_back("Green")-Words.push_back("Teal")-Words.push_back("Brick")-Words.push_back("Purple")-Words.push_back("Brown")-Words.push_back("LightGray")-// Definir um iterator.vector aleatório :: Iterator Iter = Words.begin () - // Acesso points.Iter aleatória + = 5-cout lt; lt; * Iter lt; lt; endl-Iter - = 2-cout lt; lt; * Iter lt; lt; endl-retorno 0-}
Neste caso, o vetor, Palavras, contém uma lista de sete itens. O código cria uma iterator para Palavras nomeado Iter. Em seguida, adiciona ou subtrai o iterator offset e exibe a tela de saída. Aqui está o que você vê quando você executar este exemplo:
BrownBrick
Às vezes você precisa executar uma tarefa especial usando um de acesso aleatório iterator. Por exemplo, você pode querer criar uma função especial para sintetizar os membros do vetor ou apenas uma série de membros dentro vetor.
Neste caso, você deve criar uma função especializada para executar a tarefa da seguinte forma porque a biblioteca padrão não inclui quaisquer funções para fazer isso por você, como mostrado na RandomAccess2 exemplo:
#incluir#incluir usando namespace std-template flutuar addIT (RandomAccessIterator início, fim RandomAccessIterator) {float Sum Index = 0-RandomAccessIterator - // Certifique-se de que os valores estão na order.If correta (começar> end) {RandomAccessIterator temp-temp = começam-begin = end-end = temp-} para (Índice = iní- Índice! = final de Índice ++) Soma + = * Índice de retorno Sum-} int main () {vector Numbers-Numbers.push_back(1.0)-Numbers.push_back(2.5)-Numbers.push_back(3.75)-Numbers.push_back(1.26)-Numbers.push_back(9.101)-Numbers.push_back(11.3)-Numbers.push_back(1.52)-// Somar o members.float indivíduo Sum-Sum = addIT (Numbers.begin (), Numbers.end ()) - cout lt; lt; Soma lt; lt; endl-Sum = addIT (Numbers.end (), Numbers.begin ()) - cout lt; lt; Soma lt; lt; endl - // Soma um range.vector :: Iterator Iter = Numbers.begin () - Iter + = 5-Sum = addIT (Iter, Numbers.end ()) - cout lt; lt; Soma lt; lt; endl-retorno 0-}
Este exemplo é baseado no exemplo anterior. Você ainda criar vetor, Números, e preenchê-lo com dados. No entanto, neste caso, você cria uma variável de saída, Soma, que contém a soma dos elementos contidos no Números.
AddIT () é uma função especial que aceita dois RandomAccessIterator valores como entrada. Estas duas entradas representam um intervalo dentro do vetor que você deseja manipular de alguma forma. O exemplo simplesmente adiciona-los, mas você pode executar qualquer tarefa que você deseja. A saída é uma flutuador que contém o somatório.
AddIT () funciona como o esperado. Você chamá-lo como faria com qualquer outra função e fornecer um ponto de partida e um ponto final no prazo vetor. As duas primeiras chamadas para addIT Resumindo o inteiro vetor, enquanto o terceiro cria um iterator, muda o seu deslocamento, e soma um intervalo dentro vetor. Aqui está a saída deste exemplo:
30.43130.43112.82
Um de acesso aleatório iterator pode ir em qualquer direção. Além disso, você pode trabalhar com os membros individuais dentro do recipiente fornecido para iterator. Como resultado, as funções que você criar para iterator deve ser capaz de trabalhar com as entradas em qualquer ordem. Como você lida com esse requisito depende do tipo de função que você cria.