Classificando vetores C ++

Classificando vetores C ++
O vetor C ++ é como uma matriz com funções de membro (métodos). O comprimento do vetor pode ser aumentado ou diminuído na execução do programa. O vetor tem muitas funções de membro. Entre todas essas funções de membro, não resmungam o vetor. No entanto, C ++ possui uma biblioteca chamada Biblioteca de Algoritmo. Esta biblioteca tem muitas funções algorítmicas de uso geral. Uma delas é a função Sort (). Esta função pode ser usada para classificar recipientes C ++, como o vetor. Todos os valores de um vetor são valores do mesmo tipo.

Um programador pode escrever sua própria função (). No entanto, é provável que a função Sort () da biblioteca do algoritmo tenha um desempenho melhor do que o que o programador comum escreve.

A função stor () pode classificar os valores de um vetor em ordem ascendente ou em ordem decrescente. Para classificar um vetor, a biblioteca de algoritmo deve ser incluída. A biblioteca vetorial também deve ser incluída. O início do programa deve ser algo como:

#incluir
#incluir
#incluir
usando namespace std;

O vetor é na verdade uma classe, a partir da qual os objetos vetoriais podem ser criados. Com a seção superior acima do programa, um vetor a ser classificado pode ser criado da seguinte maneira:

vetor vtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';

O nome da classe é um vetor. O nome do objeto instanciado é VTR.

Neste tutorial, a codificação de classificação é feita na função C ++ Main (). Este tutorial explica como classificar um vetor C ++ usando o vetor acima, VTR.

Conteúdo do artigo

  • Classificação padrão
  • Classificação em ordem decrescente
  • Função de comparação personalizada
  • Outros tipos de dados
  • Conclusão

Classificação padrão

Classificações de classificação padrão em ordem crescente. A sintaxe para isso é:

modelo
Void Sort (RandomAccessIterator primeiro, RandomAccessIterator por último);

Classificando todo o vetor

O código a seguir classifica todo o vetor:

classificar (vtr.BEGIN (), VTR.fim());
para (int i = 0; icout<cout<A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

A lista classificada é:

A, B, C, D, M, N, S, V, X, Z, Z,

qual é correto. Se a classificação não estiver correta, então a falha é a do programador e não a da função Sort ().

O RandomAccessIterator é intrínseco. vtr.BEGIN () retorna um iterador que aponta para o primeiro elemento e VTR.end () retorna outro iterador do mesmo tipo que aponta logo após o último elemento. Portanto, não há necessidade de instanciar um vetor indicando, RandomAccessIterator. Dessa forma, toda a lista é classificada.

Classificando um intervalo em ordem crescente

A lista não classificada acima tem dez elementos com índices:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Para classificar apenas os elementos da posição 4, que é o índice, 3 = 4 - 1, para a posição 9, que é índice, 8 = 9 - 1, adicione 3 ao VTR.comece () para ter o primeiro iterador e depois adicione 8 ao VTR.comece () para ter o último iterador, para a função Sort (). O 9º O elemento do índice 8 não será incluído na classificação. Isto é, o último elemento indicado na faixa escolhido, é excluído para classificar. O código a seguir ilustra o seguinte:

classificar (vtr.BEGIN () + 3, VTR.begin () + 8);
para (int i = 0; icout<cout<A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D
[/c] C
A lista classificada é:
[cc lang = "text" width = "100%" altura = "100%" escape = "true" tema = "Blackboard" Nowrap = "0"]
Z, X, C, A, B, M, N, V, S, D,

Os elementos nas posições 4, 5, 6, 7, 8 foram classificados. O elemento no 9º a posição não foi incluída no tipo. Essas posições correspondem aos índices 3, 4, 5, 6, 7. O elemento no índice 8 não foi incluído no tipo.

Então, para classificar um intervalo, identifique o primeiro e o último elementos do intervalo, não necessariamente de toda a lista. Adicione o índice do primeiro elemento ao iterador Begin (). Adicione o índice do último elemento, ainda ao iterador Begin (). Lembre -se de que o último elemento para o intervalo não será incluído no tipo, mas o primeiro elemento para o intervalo será incluído.

Adicionar um índice a um iterador é possível porque adicionar um número é o mesmo que incrementar o iterador o mesmo número de vezes. Incrementar um iterador uma vez faz isso para o próximo elemento.

Classificação em ordem decrescente

A sintaxe é:

modelo
Void Sort (RandomAccessIterator Primeiro, RandomAccessIterator por último, compare comp);

Isso difere da sintaxe acima com a presença de "compare comp". Comp é um ponteiro de função ou um objeto de função. Comp realmente decide se a classificação deve estar ascendente ou descendente. Sua ausência é o caso padrão, que significa descer.

Classificando toda a lista em ordem decrescente

O código a seguir classifica todo o vetor acima em ordem decrescente:

classificar (vtr.BEGIN (), VTR.end (), maior());
para (int i = 0; icout<cout<A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

O vetor classificado em ordem decrescente é:

Z, X, V, S, N, M, D, C, B, A,

Observe o uso de "maior ()" no lugar de comp.

O oposto de maior () é menor (), que é o padrão (ascendente) e não precisa ser digitado.

Classificando um alcance em ordem decrescente

Um intervalo pode ser classificado em ordem decrescente, bem como em ordem crescente. O código a seguir classifica os 4º para o 9º elemento sem incluir o 9º elemento; e descendo.

classificar (vtr.BEGIN () + 3, VTR.begin () + 8, maior());
para (int i = 0; icout<cout<A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

O vetor com seu alcance escolhido, classificado em ordem decrescente, é:

Z, X, C, V, N, M, B, A, S, D,

Função de comparação personalizada

O programa a seguir possui função de comparação personalizada para classificar ascendentes:

#incluir
#incluir
#incluir
usando namespace std;
vetorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
Bool Compare (char a, char b)
retornar (a < b);

int main ()

classificar (vtr.BEGIN (), VTR.end (), compare);
para (int i = 0; icout<cout<retornar 0;

A função de fazer a comparação é chamada de comparação. Ele retorna um bool. Possui dois parâmetros, A e B, do mesmo tipo, como o tipo de elemento vetorial. Ele retorna verdadeiro se a for menor que B e Falso, caso contrário. O nome desta função é o terceiro argumento da chamada de função sort (). Neste programa, comparar é o mesmo que menos (). Alguns outros nomes em vez de comparar podem ser usados.

A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

A lista classificada é:

A, B, C, D, M, N, S, V, X, Z, Z,

Claro que a função de comparação personalizada pode ser usada para um intervalo. O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
vetorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
Bool Compare (char a, char b)
retornar (a < b);

int main ()

classificar (vtr.BEGIN () + 3, VTR.begin () + 8, compare);
para (int i = 0; icout<cout<retornar 0;

A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

A lista classificada é:

Z, X, C, A, B, M, N, V, S, D,

A função de comparação pode ser codificada para descer. O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
vetorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
Bool Compare (char a, char b)
retornar (a> b);

int main ()

classificar (vtr.BEGIN (), VTR.end (), compare);
para (int i = 0; icout<cout<retornar 0;

Basta mudar (um b).

A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

A lista classificada é:

Z, X, V, S, N, M, D, C, B, A,

A função de comparação personalizada pode ser usada para um intervalo, em ordem decrescente. O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
vetorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
Bool Compare (char a, char b)
retornar (a> b);

int main ()

classificar (vtr.BEGIN ()+3, VTR.begin ()+8, compare);
para (int i = 0; icout<cout<retornar 0;

A lista não classificada é:

Z, X, C, V, B, N, M, A, S, D

O vetor com seu alcance escolhido, classificado em ordem decrescente, é:

Z, X, C, V, N, M, B, A, S, D,

Outros tipos de dados

Outros tipos de dados podem ser classificados usando seus tipos. Por exemplo, se o tipo de dados int for classificado, “int” seria usado para criar o vetor e na função de comparação incorporada ou personalizada. Se o tipo de dados estiver em uma biblioteca, o cabeçalho da biblioteca deverá ser incluído no programa, como no caso da string abaixo:

#incluir
#incluir
#incluir
#incluir
usando namespace std;
vetorvtr = "ze", "xe", "ce", "ve", "be", "ne", "me", "ae", "se", "de";
int main ()

classificar (vtr.BEGIN (), VTR.end (), maior ());
para (int i = 0; icout<cout<retornar 0;

A lista não classificada é:

Ze, xe, ce, ve, be, ne, me, ae, se, de

A lista classificada é:

Ze, xe, ve, se, ne, me, de, ce, be, ae,

Conclusão

C ++ vem com a biblioteca de algoritmo que tem uma função de classificação (). Esta função leva dois ou três argumentos em seu uso normal. O primeiro argumento é em que a lista vetorial, o tipo deve começar. O segundo argumento é onde a lista vetorial, o tipo deve terminar. O terceiro argumento determina se a classificação deve ser feita em ordem crescente ou em ordem decrescente.