Como alterar um conjunto para um vetor em C ++

Como alterar um conjunto para um vetor em C ++
Um conjunto pode ser criado em C ++ da seguinte maneira:
definir p = 'j', 'i', 'h', 'g', 'f';

Depois disso, há classificação interna e os valores do conjunto são organizados da seguinte maneira com base nas configurações padrão:

'F', 'g', 'h', 'i', 'j'

Quando o conjunto é convertido em um vetor, esse novo arranjo é mantido até que seja alterado. Para codificar o conjunto em um programa C ++, a biblioteca definida deve ser incluída. Para codificar o vetor em um programa C ++, a biblioteca vetorial deve ser incluída.

Existem várias maneiras de mudar um conjunto para um vetor. Três maneiras simples são explicadas neste artigo. Dois desses métodos a serem explicados neste artigo, lidar com as funções membros da classe vetorial. O outro método lida com a função de cópia da biblioteca de algoritmo.

Variam de set

Uma variedade de elementos pode ser obtida de um conjunto. Este intervalo não incluiria o último elemento indicado. O alcance sai em dois iteradores do mesmo tipo para um conjunto. O programa a seguir ilustra o seguinte:

#incluir
#incluir
usando namespace std;
int main ()

definir st = 'j', 'i', 'h', 'g', 'f';
definir:: iterator itb = st.começar(); set :: iterator ite = st.fim();
ITB ++; eu te--;
para (definido:: iterator it = itb; isto != ite; IT ++)
cout << *it << ", ";
cout << endl;
retornar 0;

A saída é:

G, h, eu,

Lembre -se de que os valores no conjunto foram reorganizados em ordem crescente com base em configurações padrão após a inserção. O iterador ITB aponta pouco antes do primeiro elemento do conjunto reordenado. O iterador ITE aponta logo além do último elemento do conjunto reordenado. "Itb ++", então aponta para o segundo elemento, enquanto "ite-" aponta para o último elemento para o intervalo. Este último elemento não será incluído no intervalo.

O loop for imprime o alcance, ['g', 'h', 'i' [, excluindo 'j' como deveria.

No caso de converter todo o conjunto em um vetor, toda a faixa do conjunto deve ser usada. Portanto, ITB ou ITE não devem ser incrementados nem decrescidos.

O construtor vetorial de alcance

O construtor vetorial, que leva uma faixa como argumentos, é:

modelo
vetor constExpr (inputIterator primeiro, inputIterator Último, const alocator & = alocator ());

Se o terceiro argumento não for dado, o valor padrão será escolhido por c++. Comparando esta sintaxe com o código acima, primeiro seria o ITB e o último seria o ITE.

Portanto, este construtor pode ser usado na conversão de um conjunto em um vetor. O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

definir st = 'j', 'i', 'h', 'g', 'f';
definir:: iterator itb = st.começar(); set :: iterator ite = st.fim();
vetor vtr (ITB, ITE);
para (int i = 0; icout << vtr[i] << ", ";
cout << endl;
retornar 0;

A saída é:

F, g, h, i, j,

classificado. O argumento do alocador foi omitido no código. O operador de colchetes quadrados foi usado para obter os valores do vetor que eram os valores classificados do conjunto.

Esta tem sido uma maneira de converter ou alterar um conjunto em um vetor. As outras duas maneiras são explicadas a seguir:

Função do membro do vetor

Uma das sintaxes da função de membro do vetor Award () é:

modelo
Atribuição do void constExpr (InputIterator Primeiro, o inputIterator Último)

É preciso um intervalo como argumentos, primeiro e durar o mesmo setter itetor. Nesta situação, o vetor vazio deve ser construído primeiro. Depois disso, o método de atribuição adicionará todos os elementos do conjunto ao vetor. O conteúdo definido permanece inalterado, mas ainda classificado. O programa a seguir ilustra o uso da função Atribuir membro:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

definir st = 'j', 'i', 'h', 'g', 'f';
definir:: iterator itb = st.começar(); definir:: iterator ite = st.fim();
vetor vtr;
vtr.Atribuir (ITB, ITE);
para (definido:: iterator it = itb; isto != ite; it ++) cout << *it << ", "; cout << endl;
para (int i = 0; iretornar 0;

A saída é:

F, g, h, i, j,
F, g, h, i, j,

O primeiro loop é exibir o conteúdo definido que não é alterado. O segundo é exibir o vetor cujo conteúdo no início é o do conjunto classificado.

Este tem sido o segundo método para converter ou alterar um conjunto para um vetor. A explicação para o terceiro método para este artigo segue:

Uma função copy () na biblioteca do algoritmo

A sintaxe de uma das funções de cópia na biblioteca do algoritmo é: é:

modelo
Cópia do constExPr OutputIterator (InputIterator Primeiro, InputIterator Último

No caso do vetor, o iterador de retorno é um iterador de entrada e um iterador de saída ao mesmo tempo. Se p for um iterador de entrada, então *P retornaria o valor apontado por P. Se P é um iterador de saída, então *P pode receber um valor para o local da memória apontado por P.

Os primeiros e os segundos argumentos aqui são os mesmos da função anterior. O resultado do argumento é um outputiterator que aponta para o primeiro elemento do vetor.

O retorno outputiterator aqui, aponta logo após o último elemento do vetor. Isso significa que o vetor deve ser criado com um tamanho que seja pelo menos igual ao tamanho do conjunto.

Com esta função copy (), a biblioteca de algoritmo deve ser incluída no programa porque a função está na biblioteca de algoritmo. O código a seguir na função c ++ main () mostra como usar a função de cópia:

definir st = 'j', 'i', 'h', 'g', 'f';
definir:: iterator itb = st.começar(); set :: iterator ite = st.fim();
vetor vtr (10);
vetor:: iterator outit = copy (itb, ite, vtr.começar());
vtr.redimensionar (outit - vtr.começar());
para (definido:: iterator it = itb; isto != ite; it ++) cout << *it << ", "; cout << endl;
para (int i = 0; iretornar 0;

A saída é:

F, g, h, i, j,
F, g, h, i, j,

O outputIterator retornado é do vetor. O vetor teve que ser redimensionado para o número de elementos que estão no conjunto. O conteúdo do conjunto não mudou.

Conclusão

Um conjunto pode ser alterado para um vetor usando o construtor vetorial de intervalo ou a função de membro do vetor atribuído () ou a função de biblioteca de algoritmo (). Existem outros métodos menos fáceis de codificar - veja mais adiante.