sábado, 12 de maio de 2007

C++ STL (Standard Templates Library) - Parte 1

Standard Templates Library

A STL, Standard Templates Library ou Biblioteca Padrão de Gabaritos (também achei esquisito, mas é esse nome mesmo), é uma biblioteca que provê as estruturas de dados e algoritmos básicos para a Ciência da Computação. É uma biblioteca genérica onde todos os seus componentes são parametrizáveis, ou seja, cada função é feita para aceitar diversos tipos de entrada diferente e operar sobre esses dados, desde que estes tipos suportem determinadas funções básicas. Todos os componentes da STL são templates (ou gabaritos). Elas nos poupam da tarefa de reimplementar o código para cada novo tipo de dado da aplicação. Por isso, é necessário ter conhecimento de templates em C++ para entender e usar a STL. A STL oferece Containers (recipientes), Iterators (iteradores) e Algorithms (algoritmos).

Containers (Recipientes)

Como o próprio nome já sugere, recipientes ou containers são onde os dados serão armazenados, pode-se pensar neles como uma caixa onde os dados serão colocados la dentro. Containers podem ser classificados como:
  • Seqüências de dados;
  • Recipientes associativos para pares de objetos (chave, dado);
  • Adaptadores que provêem um subconjunto da funcionalidade de um recipiente (Pilhas, filas, filas de prioridade).
Iterators (Iteradores)

Iteradores são as estruturas usadas para percorrer e/ou acessar os elementos contidos em um recipiente de maneira unificada. Estas estrutras escondem os detalhes de implementação, principalmente ponteiros, das aplicações. Com isto, além de a programação ser facilitada fica menos propensa a erros. Portanto, geralmente é possível trocar o tipo de recipiente e ainda assim usar o mesmo código.

Algorithms (Algoritmos)

A STL possui inúmeros algoritmos prontos para se usar, sendo que estes algorimos recebem como entrada tipicamente recipientes e normalmente, o processamento efetuado utiliza somente iteradores, nada de ponteiros. Ordenação, busca, contagem, substituição, etc... Iteradores tem operadores de incremento "++" definidos. Ponteiros podem ser usados como iteradores. A STL adota a filosofia de manter os algoritmos fora das classes dos recipientes, pois assim permite que o mesmo algoritmo possa agir sobre recipientes diferentes.

Referências
[1] Standard Template Library Programmer's Guide
[2] C++ Standard Templates Library: A Tutorial and Reference

Nenhum comentário: