logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

Tutorial de STL, parte 1: O que é a STL

A STL (Standard Template Library) é a biblioteca padrão da linguagem C++, e faz parte de todos os compiladores que seguem o padrão ISO C++. É uma biblioteca quase que totalmente baseada em templates, buscando simplicidade, produtividade e rapidez. Além disso, é um ótimo exemplo da filosofia do C++: você só paga (em termos de performance) por aquilo que você realmente usa. Justamente por ser baseada em templates, somente os templates usados gerarão código que será incluído no seu binário.

Temos na STL alguns estilos básicos de templates, chamados concepts. Esse concepts são templates/objetos que seguem um mesmo estilo e funcionamento, mas sem um implementação de interface para garantir similaridade (falamos nissos nos primeiros posts dessa série). A similaridade é verificada pelo compilador em tempo de compilação, já que ele sabe exatamente como o objeto é composto. Vamos aos concepts básicos da STL:

  • Containers: São objetos usados para guardar conjuntos de outros objetos ou valores. Entre eles temos o vector (um array de acesso sequencial), o list (lista ligada) e o map (mapa associativo de chave e valor). Veremos vários exemplos de containers em um post especial sobre o assunto.
  • Iterators: É uma abstração criada para unificar a forma de percorrer todos os itens de um container, de forma que o mesmo algoritmo possa ser usado em diversos containers. Isso nos permite trocar de containers de acordo com o nosso uso. Por exemplos, um std::list é mais rápido do que um vector para inserir itens no meios do container. Por outros lado, como um list é uma lista ligada, para acessar o décimo item é preciso percorrer todos os itens até ele. Abstraindo o algoritmo do container o programador consegue escolher o melhor container, de acordo com o padrão de uso.
  • Algoritmos: Funções templates que manipulam de alguma forma os containers, modificando seu próprios itens ou gerando cópias. Como dito, são feitos com o mínimo possível de conhecimento sobre o container que será utilizado, para que possa ser usado de forma genérica na maior quantidade possível de situações e usos. Já falamos, de forma simplificada, sobre abstração do tipo de dados na implementação de algoritmos, e falaremos nisso em detalhes depois.

Um dos pontos chaves da STL é (ao contrário da orientação a objetos clássica) separar os dados dos algortimos que o manipulam. Dessa forma, um algortimo construído de forma genérica consegue manipular vários tipos de dados em diversos tipos de containers. Isso permite que você monte seu programa juntando as peças que melhor resolvem o seu problema, e elas continuam se encaixando mesmo depois de mudadas. Eu sei que essa explicação chega a ser ridiculamente teórica e abstrata, mas eu prometo que veremos bastante código usando STL daqui para frente. Considere essa parte como aquele primeiro capítulo do livro que você precisa ler novamente depois de ler o livro inteiro. :-)

Em 11/07/2006 04:08, por Rodrigo Strauss


  
 
 
Comentários
Aderbaldo | em 10/07/2006 | #
STL tem que pagar de verdade?
Como funciona essa de pagar pelo que usa?
É caro?
Paga para quem?
Daniel Quadros | website | em 11/07/2006 | #
Aderbaldo,

O Rodrigo não quis dizer pagar em dinheiro, ele se referia aos custos em termos de tamanho de executável, memória, tempo de execução, etc. Em muitas outras linguagens o seu programa carrega sempre os "custos" de todos os recursos disponíveis na linguagem, mesmo que o seu programa não os utilize.
Edgar | website | em 12/04/2007 | #
Daniel, acho que era uma piada...
alessandro | em 01/03/2010 | #
Vc pode dar exemplo de como programar em STL?
Rodrigo Strauss | website | em 03/03/2010 | #
Então, essa é a primeira parte de um longo tutorial de STL. Siga lendo os posts. :-)
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::