C ++ é uma das linguagens de programação mais poderosas e intimidantes que você pode encontrar como um iniciante. O motivo é bastante simples. Exige muito código para atingir a saída desejada. A biblioteca de modelos padrão, ou STL, pode ajudá-lo a resolver esse enigma.

Considerando a quantidade de tempo e esforço consumidos ao escrever código para funções como classificação e pesquisa, o STL pode ajudá-lo a realizar todas essas operações com apenas uma única linha de código. Esta biblioteca pode ser extremamente útil para a resolução de problemas e preparação para entrevistas técnicas.

O que é a biblioteca de modelos padrão?

A Standard Template Library, ou STL, é uma biblioteca C ++ que consiste em funções e contêineres pré-construídos. Inclui algumas classes de template proeminentes para estruturas de dados comuns como vetores, pilhas, filas e algumas funções algorítmicas úteis como busca binária para tornar a programação mais fácil.

A Biblioteca de Modelos Padrão em C ++ consiste em quatro componentes:

  1. Algoritmos
  2. Recipientes
  3. Funções
  4. Iteradores

Vamos dar uma olhada nos algoritmos e contêineres com mais detalhes, já que esses são os componentes mais comumente usados ​​do STL.

Algoritmos em STL

O O arquivo de cabeçalho é uma parte do STL que consiste em várias funções algorítmicas que podem ser usadas em vez de codificá-las manualmente. Alguns dos algoritmos incluídos são pesquisa binária, classificação e reverso, que são extremamente úteis.

Para começar, você precisa importar o cabeçalho em seu arquivo C ++. A sintaxe é a seguinte:

#incluir 

Para os próximos métodos, considere uma variável de matriz com os valores de {6, 2, 9, 1, 4} como exemplo.

int arr [] = {6, 2, 9, 1, 4};

ordenar()

O ordenar() função ajuda a classificar todos os elementos dentro da estrutura de dados especificada em ordem crescente. Esta função leva dois parâmetros: o iterador inicial e o iterador final.

Relacionado: Uma introdução ao algoritmo de classificação de mesclagem

Sintaxe:

classificar (start_iterator, end_iterator);

Aqui está um exemplo rápido:

classificar (arr, arr + 5);
para (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Resultado:

1 2 4 6 9

marcha ré()

O marcha ré() função inverte a ordem dos elementos na estrutura de dados especificada. Ele aceita dois parâmetros: o iterador inicial e o iterador final.

Sintaxe:

reverso (start_iterator, end_iterator);

Aqui está um pequeno exemplo para o método acima:

reverso (arr, arr + 5);
para (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Resultado:

4 1 9 2 6

* min_element () e * max_element ()

As funções * max_element () e * min_element () retorna o valor máximo e mínimo dentro da estrutura de dados especificada, respectivamente. Ambas as funções aceitam dois argumentos: o iterador inicial e o iterador final.

Sintaxe:

* max_element (start_iterator, end_iterator);
* min_element (start_iterator, end_iterator);

Vamos descobrir quais valores essas funções retornam ao chamá-las na matriz de exemplo:

cout << * max_element (arr, arr + 5) << endl;
cout << * min_elemento (arr, arr + 5) << endl;

Resultado:

9
1

binary_search ()

O binary_search () método é usado para descobrir se o valor especificado está presente dentro da estrutura de dados ou não. Ele aceita três argumentos: o iterador inicial, o iterador final e o valor que você deseja encontrar.

A pesquisa binária só funciona em estruturas de dados classificadas. Portanto, você precisará ligar para o ordenar() método primeiro antes do binary_search () método.

Sintaxe:

binary_search (start_iterator, end_iterator, value_to_find)

Aqui está uma demonstração desse método:

classificar (arr, arr + 5);
binary_search (arr, arr + 5, 2)? cout << "Elemento encontrado": cout << "Elemento não encontrado";
binary_search (arr, arr + 5, 7)? cout << "Elemento encontrado": cout << "Elemento não encontrado";

Resultado:

Elemento encontrado
Elemento não encontrado

contar()

O contar() método retorna a contagem de ocorrência do valor especificado dentro da estrutura de dados. Leva três argumentos: o iterador inicial, o iterador final e o valor a ser contado.

Sintaxe:

contagem (start_iterator, end_iterator, value_to_count);

Aqui está um exemplo desse método:

cout << contagem (arr, arr + 5, 2) << endl;

Resultado:

1

Recipientes em STL

Os contêineres são as estruturas de dados que armazenam objetos e dados. Vetores, listas, pilhas, filas, conjuntos e mapas são alguns dos exemplos que armazenam dados neles de acordo com o tipo de dados primitivo especificado. Você pode usar esses contêineres importando seus respectivos cabeçalhos no arquivo C ++.

Ao inicializar a variável do contêiner, você precisa mencionar os dados primitivos, como int, Caracteres, fragmento dentro de <> colchetes.

Vamos explorar alguns desses contêineres em mais detalhes:

Vetor

Os vetores são matrizes dinâmicas redimensionáveis ​​e flexíveis de se trabalhar. Quando você insere ou exclui um elemento do vetor, ele ajusta automaticamente o tamanho do vetor. Isso é semelhante ao Estrutura de dados ArrayList em Java.

Sintaxe:

#incluir 
vetor nome variável;

Aqui estão alguns métodos de vetor importantes:

  1. push_back (valor): Este método anexa os dados ao vetor.
  2. pop_back (): Este método remove o último elemento do vetor.
  3. inserir (índice, valor): Este método insere novos elementos antes do elemento na posição especificada.
  4. Tamanho(): Este método retorna o tamanho do vetor.
  5. vazio(): Este método verifica se o vetor está vazio ou não.
  6. frente(): Este método retorna o primeiro valor do vetor.
  7. voltar(): O método back retorna o último valor do vetor.
  8. em (índice): Este método retorna o valor na posição especificada.
  9. apagar (índice): O método erase remove elementos do índice fornecido.
  10. Claro(): Este método limpa todos os itens do vetor.
vetor  v = {23, 12, 56, 10};
v.push_back (5);
v.push_back (25);
v.pop_back ();
auto i = inserção de v (v.begin () + 1, 7);
cout << "O tamanho do vetor fornecido" << v.size () << endl;
if (v.empty ()) {
cout << "O vetor está vazio" << endl;
} senão {
cout << "O vetor não está vazio" << endl;
}
cout << "O elemento na primeira posição é" << v.front () << endl;
cout << "O elemento na última posição é" << v.back () << endl;
cout << "O elemento na posição fornecida é" << v.at (4) << endl;
v.erase (v.begin () + 1);
para (int i = 0; i cout << v [i] << "";
}

Resultado:

O tamanho do vetor fornecido 6
O vetor não está vazio
O elemento na primeira posição é 23
O elemento na última posição é 5
O elemento na posição dada é 10
23 12 56 10 5

Fila

Na estrutura de dados da fila, os elementos são inseridos por trás e excluídos pela frente. Portanto, segue a abordagem FIFO ("primeiro a entrar, primeiro a sair").

Sintaxe:

#incluir 
fila nome variável;

Aqui estão alguns métodos de fila importantes:

  1. push (valor): Este método adiciona elementos à fila.
  2. pop (): Este método exclui o primeiro elemento da fila.
  3. Tamanho(): Este método retorna o tamanho da fila.
  4. frente(): Este método retorna o primeiro elemento da fila.
  5. voltar(): Este método retorna o último elemento da fila.
fila  q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "O primeiro elemento é" << q.front () << endl;
cout << "O último elemento é" << q.back () << endl;
cout << "O tamanho da fila é" << q.size () << endl;
q.pop ();
cout << "Imprimindo todos os elementos da Fila" << endl;
while (! q.empty ()) {
cout << q.front () << "";
q.pop ();
}

Resultado:

O primeiro elemento é 30
O último elemento é 70
O tamanho da fila é 5
Impressão de todos os elementos da fila
40 50 60 70

Pilha

Os contêineres de pilha operam no método LIFO. LIFO significa "último a entrar, primeiro a sair". Os dados são enviados e retirados da mesma extremidade.

Sintaxe:

#incluir 
pilha nome variável;

Aqui estão alguns métodos de pilha importantes:

  1. push (valor): Este método coloca o elemento na pilha.
  2. pop (): Este método exclui o elemento superior da pilha.
  3. principal(): Este método retorna o valor do último elemento inserido na pilha.
  4. Tamanho(): Este método retorna o tamanho da pilha.
  5. vazio(): Este método verifica se a pilha está vazia ou não.
pilha  s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "O topo da pilha contém" << s.top () << endl;
s.pop ();
cout << "O topo da pilha após executar a operação pop:" << s.top () << endl;
cout << "Imprimindo todos os elementos da pilha" << endl;
while (! s.empty ()) {
cout << s.top () << "";
s.pop ();
}

Resultado:

O topo da pilha contém 60
O topo da pilha após realizar a operação pop: 50
Imprimir todos os elementos da pilha
50 40 30

Definir

Os contêineres de conjunto são usados ​​para manter valores únicos e o valor do elemento não pode ser alterado depois de inserido no conjunto. Todos os elementos do conjunto são armazenados de forma ordenada. O conjunto de contêiner é semelhante ao definir estrutura de dados em Python.

Sintaxe:

#incluir 
definir nome variável;

Aqui estão alguns métodos de definição importantes:

  1. inserir (valor): Este método insere elementos no conjunto.
  2. começar(): Este método retorna o iterador para o primeiro elemento do conjunto.
  3. fim(): Este método retorna o iterador para o último elemento do conjunto.
  4. Tamanho(): Este método retorna o tamanho do conjunto.
  5. vazio(): Este método verifica se o conjunto está vazio ou não.
  6. encontrar (valor): Este método retorna o iterador para o elemento passado no parâmetro. Se o elemento não for encontrado, esta função retorna o iterador ao final do conjunto.
  7. apagar (valor): Este método excluiu o elemento especificado do conjunto.
definir  s;
s.insert (20);
s.insert (30);
s.insert (40);
s.insert (50);
s.insert (60);
s.insert (60);
s.insert (60);
auto i = s.begin ();
cout << "Elemento na primeira posição" << * i << endl;
cout << "O tamanho do conjunto" << s.size () << endl;
s.find (20)! = s.end ()? cout << "Elemento encontrado" << endl: cout << "Elemento não encontrado" << endl;
s.erase (30);
cout << "Imprimindo todos os elementos" << endl;
para (auto i = s.begin (); i! = s.end (); i ++) {
cout << * i << "";
}

Resultado:

Elemento na primeira posição 20
O tamanho do conjunto 5
Elemento encontrado
Imprimindo todos os elementos
20 40 50 60

C ++ não precisa ser difícil

Assim como qualquer outra habilidade, a prática é essencial para tirar o máximo proveito do STL. Esses contêineres e algoritmos podem ajudar você a economizar muito tempo e são fáceis de usar. Comece praticando os exemplos mostrados acima e, eventualmente, começará a usá-los em seus próprios projetos também.

No entanto, se esta é a primeira vez que está aprendendo C ++, comece aprendendo o básico antes de continuar a entender o STL.

E-mail
Como aprender programação C ++: 6 sites para começar

Quer aprender C ++? Aqui estão os melhores sites e cursos online de C ++ para iniciantes e programadores experientes.

Leia a seguir

Tópicos relacionados
  • Programação
  • Tutoriais de codificação
  • Programação Funcional
Sobre o autor
Nitin Ranganath (22 artigos publicados)

Nitin é um desenvolvedor de software ávido e um estudante de engenharia da computação desenvolvendo aplicativos da web usando tecnologias JavaScript. Ele trabalha como desenvolvedor web freelance e gosta de escrever para Linux e programação em seu tempo livre.

Mais de Nitin Ranganath

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Mais um passo…!

Confirme seu endereço de e-mail no e-mail que acabamos de enviar.

.