Se vtra se tornar 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' e
vtrb se torna 'a', 'b', 'c', 'd', 'e'
Então os dois vetores foram trocados. O fato de os vetores terem comprimentos diferentes não representa um problema. Para que dois vetores sejam trocados, eles devem ser do mesmo tipo.
A classe vetorial tem uma função de membro para trocar em si e outro vetor. A biblioteca de algoritmo tem outras funções de troca com nomes diferentes e para fins modificados. A principal diferença entre a função Swap () do membro do vetor e as funções de troca de algoritmo é que, enquanto a função do membro troca seu vetor com outro vetor, as funções de troca de bibliotecas de algoritmo, cada uma delas trocou dois vetores independentes.
A função do membro vetorial, swap (), será discutida neste artigo, e as funções de troca de bibliotecas de algoritmo também serão discutidas. Todo o código vetorial é feito na função principal () para este artigo, a menos que indicado de outra forma.
Conteúdo do artigo
Função do membro do vetor ()
Void Swap (Vector &)
No programa a seguir, dois vetores são declarados e seu conteúdo total é trocado:
#incluir
#incluir
usando namespace std;
int main ()
vetorvtra = 'a', 'b', 'c', 'd', 'e';
vetorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vtra.troca (vtrb);
para (int i = 0; icout << vtrA[i] << ";
cout << endl;
para (int i = 0; icout << vtrB[i] << ";
cout << endl;
retornar 0;
A saída é:
F g h i j k l m
A B C D E
O conteúdo total de ambos os vetores foi trocado. A biblioteca vetorial deve ser incluída para usar um vetor em C ++, com a diretiva: #include .
No programa e na função Main (), o primeiro segmento declara os dois vetores. O próximo segmento de código de uma linha que é,
vtra.troca (vtrb);
troca os dois vetores. É claro que a troca (VTRB) é uma função de membro do vetor, vtra. Os dois segmentos de código que chegam após a exibição do conteúdo trocado.
Iterando com iteradores em vez de índices
Um vetor pode ser iterado com iteradores em vez do índice. O programa a seguir mostra como isso pode ser feito para o conteúdo do vetor trocado:
#incluir
#incluir
usando namespace std;
int main ()
vetorvtra = 'a', 'b', 'c', 'd', 'e';
vetorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vtra.troca (vtrb);
para (vetor:: iterador p = vtra.começar(); p != vtra.fim(); p ++)
cout << *p << ";
cout << endl;
para (vetor:: iterator q = vtrb.começar(); q != vtrb.fim(); Q ++)
cout << *q << ";
cout << endl;
retornar 0;
A saída é:
F g h i j k l m
A B C D E
Observe a maneira como o principal iterador é inicializado em cada loop para. Observe a condição de enquanto em cada loop for. O principal iterador em cada loop for incrementado como o índice.
Trocando trocando iteradores
A biblioteca de algoritmo tem uma função de troca chamada iter_swap (). Esta função troca os dois principais iteradores de dois vetores independentes. A sintaxe é:
void iter_swap (ForwardIVerator1 a, ForwardIVerator2 b)
O programa a seguir mostra como essa função algoritmo-iter_swap () pode ser aplicada:
#include>
#incluir
#incluir
usando namespace std;
int main ()
vetorvtra = 'a', 'b', 'c', 'd', 'e';
vetorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vetor:: iterator u = vtra.começar();
vetor:: iterator v = vtrb.começar();
troca (u, v);
para (u = u; u != vtrb.fim(); u ++)
cout << *u << ";
cout << endl;
para (v = v; v != vtra.fim(); v ++)
cout << *v << ";
cout << endl;
retornar 0;
A saída é:
F g h i j k l m
A B C D E
Observe que a biblioteca de algoritmo teve que ser incluída. O segmento de código em destaque para este programa é:
vetor:: iterator u = vtra.começar();
vetor:: iterator v = vtrb.começar();
troca (u, v);
Para a primeira dessas declarações, U aponta para 'a' do vetor, vtra. Para a segunda declaração, V aponta para 'f' do vetor, vtrb. A terceira declaração troca o apontador. Com ele, agora aponta para 'f' de vtrb e v apontar para 'a' de vtra. agora você pode ser usado para iterar através dos elementos do VTRB, e V agora pode ser usado para iterar através dos elementos do VTRA.
Faixa
Para o vetor,
'F', 'g', 'h', 'i', 'j', 'k', 'l', 'm'
a sequência,
'H', 'i', 'j', 'k'
é um intervalo.
As iterações para esse intervalo podem ser obtidas da seguinte forma:
vetorvtr = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vetor:: iterator itb = vtr.começar();
ITB ++; ITB ++;
vetor:: iterator ite = vtr.fim();
eu te--; eu te--; eu te--;
cout << *itB << " << *itE << endl;
A saída é:
H k
A expressão, VTR.BEGIN (), retorna um iterador que aponta para 'f'. A expressão, VTR.end (), retorna um iterador que aponta logo após o último elemento do vetor. O iterador deve ser incrementado duas vezes para fazer o iterador que aponta para 'f' para apontar para 'h'. Para fazer do iterador que os pontos, logo além do vetor, apontar para 'K', que o iterador deve ser diminuído três vezes e não duas vezes. Quando diminui a primeira vez, aponta para o último elemento, 'm'. Quando diminuiu a segunda vez, aponta para o elemento antes, 'l'. E quando diminuiu a terceira vez, aponta para o elemento, 'k'. *ITB retorna o valor do elemento que o ITB foi apontando pela última vez. *ite retorna o valor do elemento que foi a última vez que está apontando para.
Então o intervalo, por iteradores, é:
[ITB, ITE)
')' No final da notação do alcance significa que, se o intervalo for instalado em outro vetor ou trocado por outro vetor, o último valor do intervalo, representado pelo ITE, não estará envolvido. Isto é, apenas elementos do ITB para o pouco antes, o ITE será copiado ou trocado.
Faixa de troca com todo o vetor
A biblioteca de algoritmo tem uma função para trocar um intervalo em um vetor com outro vetor inteiro. A sintaxe para a função é:
ForwardIterator2 swap_anges (ForwardIVerator1 First1, Forwarditerator1 last1, ForwardIVerator2 First2)
First1 representa o iterador que aponta para o primeiro elemento do intervalo. Last1 representa o iterador que aponta para o último elemento do intervalo. Este último elemento é apenas um delimitador; não estará envolvido na troca. First2 aponta para o primeiro elemento do vetor de inserção. A função retorna um iterador que aponta para o próximo elemento, não trocando todo o vetor - veja o código a seguir. O programa a seguir ilustra essa troca com a função swap_anges ().
#incluir
#incluir
#incluir
usando namespace std;
int main ()
vetorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vetor:: iterator itb = vtrb.começar();
ITB ++; ITB ++;
vetor:: iterator ite = vtrb.fim();
eu te--; eu te--; eu te--;
vetorvtra = 'a', 'b', 'c', 'd', 'e';
vetor:: iterator itr = swap_anges (itb, ite, vtra.começar());
para (int i = 0; icout << vtrB[i] << ";
cout << endl;
cout << *itR << endl;
para (int i = 0; icout << vtrA[i] << ";
cout << endl;
retornar 0;
A saída é:
F g a b c k l m
D
H i j d e
Observe que todo o vetor não foi trocado. Em vez disso, são apenas os três primeiros valores de todo o vetor que foi trocado, com o terceiro, quarto e quinto valores de Vtrb. O sexto elemento do VTRB não estava envolvido, e isso era esperado.
VTRA tem 5 elementos, enquanto o VTRB tem 8 elementos. Para trocar verdadeiramente o vetor inteiro, o VTRA de 5 elementos, a sequência em Vtrb em questão, precisa ter 6 elementos (com o sexto elemento sendo apenas um delimitador). O programa a seguir ilustra o seguinte:
#incluir
#incluir
#incluir
usando namespace std;
int main ()
vetorvtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vetor:: iterator itb = vtrb.começar();
ITB ++; ITB ++;
vetor:: iterator ite = vtrb.fim();
eu te--;
vetorvtra = 'a', 'b', 'c', 'd', 'e';
vetor:: iterator itr = swap_anges (itb, ite, vtra.começar());
para (int i = 0; icout << vtrB[i] << ";
cout << endl;
cout << *itR << endl;
para (int i = 0; icout << vtrA[i] << ";
cout << endl;
retornar 0;
A saída é:
F g a b c d e m
H i j k l
Desta vez, todos os 5 valores de VTRA foram trocados com o terceiro, quarto, quinto, sexto e sétimo valores do VTRB. Então, para verdadeiramente trocar um vetor inteiro, o vetor mais longo deve ter o número correspondente de elementos (em sequência).
Conclusão
Trocar dois vetores significa trocar o conteúdo de um vetor com o de outro. Para que os vetores sejam trocados, eles precisam ser do mesmo tipo. C ++ tem uma função de membro para fazer isso. Isso significa que a função Swap () de um vetor de vetor leva o outro vetor como um argumento e troca o conteúdo. Se o programador quiser mais recursos de troca, como trocar os iteradores ou trocar um intervalo em um vetor com a lista total de outro vetor, ele deve usar a biblioteca de algoritmo.