stl

Upload: raphael-santos

Post on 14-Jul-2015

145 views

Category:

Documents


1 download

TRANSCRIPT

Guia de Consulta RpidaC++ STLJoel SaadeNovatec Editora2Guia de Consulta Rpida C++ STL de Joel SaadeCopyright2006 da Novatec Editora Ltda.Todos os direitos reservados. proibida a reproduo desta obra,mesmoparcial,porqualquerprocesso,semprvia autorizao, por escrito, do autor e da Editora.ISBN: 85-7522-082-9Primeira impresso: Fevereiro/2006Novatec Editora Ltda.Rua Lus Antnio dos Santos 11002460-000So PauloBrasilTel.:+55 11 6959-6529Fax:+55 11 6950-8869E-mail: [email protected]: www.novatec.com.br3Convenes ............................................................. 4Defnies ....................................................................................... 4Introduo STL ..................................................... 5Containers ................................................................ 7Tipos comuns a todos os containers ................................................ 7Containers seqenciais .................................................................... 7Vetor .......................................................................................... 7Deque ........................................................................................11Lista ......................................................................................... 16Mtodos comuns aos containers seqenciais .......................... 24Containers associativos classifcados ............................................ 28Pares ........................................................................................ 28Set29Multiset .................................................................................... 36Map .......................................................................................... 44Multimap ................................................................................. 54Mtodos comuns a todos os containers ......................................... 62Iteradores ............................................................... 65Manipulao de streams ................................................................ 65Iterador Istream ....................................................................... 65Iterador Ostream ...................................................................... 67Iterador Input Stream Buffer ................................................... 68Iterador Output Stream Buffer................................................. 69Adaptadores........................................................... 71Adaptadores de container .............................................................. 71Stack (pilha) ............................................................................ 71Queue (fla) .............................................................................. 74Priority_queue (fla com prioridade) ....................................... 78Adaptadores de Iterador ................................................................ 81Iterador de insero ................................................................. 81Iterador reverso ........................................................................ 84Adaptadores de funo .................................................................. 87Binders ..................................................................................... 87Negators ................................................................................... 88Objetos-funo ...................................................... 89Functors predefnidos .................................................................... 89Functors para os operadores aritmticos ................................. 89Functors para os operadores relacionais .................................. 89Functors para os operadores lgicos ....................................... 90Predicates ...................................................................................... 90Algoritmos .............................................................. 91Algoritmos de no-modifcao de seqncias ............................. 91Algoritmos de modifcao de seqncias .................................. 100Algoritmos relacionados ordenao ..........................................114Operaes de ordenao e intercalao ..................................114Operaes de comparao e pesquisa ................................... 120Operaes de conjunto .......................................................... 123Operaes de heap ................................................................. 126Comparao lexicogrfca ..................................................... 128Permutaes ........................................................................... 129Algoritmos numricos genricos ................................................ 130Somrio4ConvenesConveno SignifcadoItInp Iteradorinput.ItOut Iteradoroutput.ItFwd Iteradorforward.ItBid Iteradorbidirectional.ItRac Iteradorrandomaccess.mtodo Omesmoquefuno-membro.T Tipodosvaloresarmazenadosemumcontainer(porexemplo,int,foat,char).X Classe-container que contm objetos do tipo T (por exemplo,vector).a UmobjetodaclasseX(porexemplo,vector a).DefniesTermo Signifcado[frst,last) Pardeiteradoresquedefneumintervaloiniciadoemfrst e terminado,massemincluirlast:intervalofechadoemfrst e abertoemlast.funounria Funoquerecebeumargumento.funobinria Funoquerecebedoisargumentos.iterao Oatodeumiteradorpercorrerumcontainerseqencialmente,elementoaelemento.mtodobinrio Mtodoquerecebedoisargumentos.mtodounrio Mtodoquerecebeumargumento.past-the-end Posio aps a ltima em um container, assumida por umiterador.seqncia Umpardeiteradorespassadocomoargumentoaumalgoritmoquedefneumintervalodeelementossobreoqualoalgoritmoatuar.Observaes Para os programas-exemplo que utilizam as notaes it->frsteit->second,casoocompiladorquevocesteja usando no as aceite, utilize (*it).frst e (*it).second. Nosprogramas-exemplo,aslinhasdecdigo#include e using namespace std; foram suprimidas porseremcomunsatodososprogramas.Nositeda NovatecEditora,taisprogramasestonasuaforma integral, disponveis para download (www.novatec.com.br/download/). Convonos5Introduo STLA Standard Template Library (STL) uma biblioteca integrada biblioteca padro de C++, por meio do mecanismo de templates. Almdeprogramascontmoutroscomponentes,entreeles, destacam-seestruturasdedadoseponteirosinteligentes.Na terminologiaSTL,asestruturasdedadossochamadasde containers,osprogramassochamadosdealgoritmoseos ponteiros inteligentes, de iteradores.Os containers armazenam valores de um dado tipo (int, foat etc).Osalgoritmoscorrespondemsaesaseremexecutadas sobre os containers (ordenao, pesquisa e outras). Os iteradores percorrem os elementos dos containers da mesma forma que um ndice percorre os elementos de um array. Esses trs componentes sobsicoseoseuconhecimentoomnimoparaseusara STL.ASTLumacaixadeferramentasqueauxilia,quetraz solues para muitos problemas de programao que envolvem estruturas de dados.Bem,masquaisseriamessasestruturasdedadosequais seriam esses problemas?Asestruturasdedadosbsicasso:vetor,lista,deque,set, multiset,mapemultimap.Emaisasseguintes,criadasapartir das estruturas bsicas: pilha, fla e fla com prioridade.Entreosproblemasencontradosnodesenvolvimentode aplicaes que usam estruturas de dados, destacam-se:ordenar os elementos de uma lista;efetuar uma pesquisa efciente em um vetor;gerenciar a memria quando da insero ou eliminao de elementos de uma deque.A STL foi desenvolvida por Alexander Stepanov e Meng Lee, nos laboratrios da Hewlett Packard, com a valiosa colaborao de David R. Musser. Em 1994, o comit ISO/ANSI C++ decidiu incorporar a STL biblioteca padro de C++ e neste mesmo ano, a HP disponibilizou a STL na Internet.Para mostrar a poder da STL, veja o exemplo seguinte.1 //Criaumvetorcomnomeseoordenaascendentemente2 #include//Paraalgoritmos3 #include //Paracontainersvector4 #include //Paraobjetosstring5 intmain()6 {7 vectornomes;//Vetordeobjetosstring8 //Iteradorparavetoresdeobjetosstring9 vector::iteratorit;10//Inserevaloresnovetorcomomtodopush_back()11nomes.push_back(Ana);12nomes.push_back(Rose);13nomes.push_back(Jane);14nomes.push_back(Carla);15cout