Como você troca vetores em c++?

Como você troca vetores em c++?
Seja vtra = 'a', 'b', 'c', 'd', 'e';
Seja vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';

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 ()
  • Iterando com iteradores em vez de índices
  • Trocando trocando iteradores
  • Faixa
  • Faixa de troca com todo o vetor
  • Conclusão

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 ()

vetor vtra = 'a', 'b', 'c', 'd', 'e';
vetor vtrb = '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 ()

vetor vtra = 'a', 'b', 'c', 'd', 'e';
vetor vtrb = '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 ()

vetor vtra = 'a', 'b', 'c', 'd', 'e';
vetor vtrb = '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:

vetor vtr = '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 ()

vetor vtrb = '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--;
vetor vtra = '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 ()

vetor vtrb = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm';
vetor:: iterator itb = vtrb.começar();
ITB ++; ITB ++;
vetor:: iterator ite = vtrb.fim();
eu te--;
vetor vtra = '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.