Sie sind auf Seite 1von 16

C++ Standard Template Library (STL)

Una gua para el ACM ICPC

C++ Standard Template Library


1. ve t!r" Arregl! de tama#! din$mi !. %. &tring" Cadena de tama#! din$mi !. '. pair" (upla ! par de !b)et!&. *. bit&et" Arregl! de bit&(+ ! 1), !ptimi-ad! para e.i ien ia. *. &et" C!n)unt! !rdenad! de element!& /. map" C!n)unt! !rdenad! de element!& y val!re& a&! iad!&. 0. &tring&tream" 1lu)! de dat!& 2. 3ueue" C!la 4

#include #include #include #include #include #include

<iostream> <vector> <string> <algorithm> <bitset> <sstream>

#include <set> #include <map> #include <queue> #include <stack> #include <cstdio> #include <cmath> #include <cstdlib> using namespace std; int main() {

return 0; }

5e t!r
(e lara i6n"
vector <tipo> V; vector <tipo> V(n); vector <tipo> V(n! au"); vector <tipo> # $ V;

va ! 77 n element!&, !n&tru t!r del tip! 77 n element!& iguale& a au8 77 &e pueden a&ignar ve t!re& 77 va !, e& me)!r utili-ar d!uble 3ue .l!at 77 1+ element!& iguale& a ' 77 matri- de 1/81+, element!&

9)m" :
vector <double> au"; vector <int> "(%0! &); vector < vector <int> > '(%(! ");

iguale& a ' : A e&! a element!&" V)ind* 77 element! ind de 5, igual 3ue l!& arregl!& n!rmale& : Tama#! del ve t!r"
int tam $ V+si,e();

: 9)m"
for(int i$0; i<au"+si,e(); i--)

muestra los elementos de aux

5e t!r

regar element!&" V+push.back(au"); 77 !l! a au8 al .inal de 5 V+insert(V+begin() - ind! au"); 77in&erta au8 en el ndi e ind de 5 77elimina el element! 5;ind< 77elimina t!d!& l!& element!& de 5

minar element!&"
V+erase(V+begin() - ind); V+clear();

mpl!"

vector <int> nums;

int n;

cin>>n;

nums+push.back(n);

Cuantos hola se imprimen en el siguiente cdigo?


vector <int> v; for(int i$0; i<v+si,e()/%; i--) cout<<0hola1<<endl;

String
(e lara i6n"
string s $ 22; string s(n! ch); string s $ au";

77 adena va a 77n ara tere& = 77a&igna i6n de val!re&

: 9)empl!"
string cad(%0! 3a3); string " $ 2hola2;

: A

e&! a ara tere&"


char ch $ s)ind*;

: Tama#! de la adena"
int tam $ s+si,e();

: C!n atena i6n"


s $ s - au"; s $ au" - s;

String
9n !ntrar una &ub adena" int pos $ s+4ind(au"); devuelve el ndi e de & en el 3ue empie-a au8 int pos $ s+4ind(au"! ind); devuelve el primer ndi e >? ind 77 amba& ret!rnan @1 &i n! en uentran a au8 : In&er i6n" s+insert(ind! au"); 77 in&erta a la adena au8 en el ndi e ind : 9limina i6n" s+erase(ind! n); 77 elimina n ara tere& empe-and! en el ndi e ind s+clear(); 77 b!rra t!da la adena

Alg!rit=m

! m$8im!" min(a! b) 77 (evuelve el mnim! ! m$8im! de a y b, para ual3uier tip! de dat! ma"(a! b) 77 3ue tenga de.inid! el !perad!r A (int, &tring, ve t!r, &tring, B) 77 e3uivale a"
a$b; b$au";

mbi! de val!re&"
au"$a;

s5ap(a! b);

mient!" !rdena a 5 en !rden re iente. 77 !rdena a 5 en !rden de re iente. ambia p!r

sort(V+begin()! V+end());

sort(V+rbegin()! V+rend());

!rden"
V)i* V)V+si,e() 6 i / %*

reverse(V+begin()! V+end());

String&tream
Input String Stream (istringstream): : Permiten e8traer dat!&(int, &tring, =ar, b!!l) de un .lu)!& de entrada(&tring) : string 4echa $ 2domingo %7 de septiembre de 80092; istringstream is(4echa); int dd! ''''; string dia! mes! au"; is>>dia>>dd>>au">>mes>>au">>''''; : : Output String Stream (ostringstream): : Permiten .!rmar un .lu)! de &alida a partir de dat!&. : int dd$%7! ''''$8009; string dia$2domingo2! mes$2septiembre2! au"$2de2; ostringstream os; os<<dia<<2 2<<dd<<2 2<<au"<<2 2<<mes<<2 2<<au"<<2 2<<''''; string 4echa$os+str();

Pair
(e lara i6n" pair <tipo%! tipo8> "; 9)empl!" : pair <int! int> "; 77 pair de enter!& pair <string! string> "; 77 pair de &tring pair < pair<int! int>! int > " 77 pair de ual3uier tip! : Ingre&! de val!re&" pair <int! int> "; int a$(! b$%0; " $ make.pair(a! b); : A e&! a element!&" "+4irst "+second ret!rna el primer element! &egund! element!

Alg!rit=m II
Function sort sobrecargada:
sort("+begin()! "+end()! orden);

Donde orden es una funcion booleana que recibe 2 elementos de x y devuelve el resultado de la comparacin entre ellos:
bool orden(tipo a! tipo b) { si a debe ser menor que b return %; return 0; }

En otras palabras orden sustituye al operador < usado por defecto E!emplo: "rdenar puntos #x$ y%en un vector < pair <int! int> > seg&n: ' 2 x creciente$ y creciente y creciente$ x creciente

Set
set <tipo> "

ne element!& &in repeti i!ne&, !rdenad!& a& endentemente. !n)unt! va i! in&erta a en el &et
"+si,e();

a i6n"

er i!n"
"+insert(a);

! de element!&"

r element!&"

"+erase(a);

!rrer el &et &e re3uiere del u&! de iterad!re&"

<int> ";

sert(%0); sert(&); sert(();

<int> :: iterator it;

it$"+begin(); it;$"+end(); it--) cout<<(<it)<<endl;

Set
Encontrar un elemento:
"+4ind(au")

77 ret!rna el iterad!r 3ue apunta al element! au8 77 ! 8.end() &i au8 n! pertene e a 8

E!emplo"
i4(=+4ind(au") $$ =+end()) cout<<0>o e"iste1<<endl; else cout<<0=i e"iste1<<endl

(asar los elementos a un vector:


vector <tipo> v("+begin()! "+end());

&e rea el ve t!r v !n l!& element!&

del &et 8 )omple!idad: *uscar +, "#logn% -nsertar +, "#logn% *orrar +, "#logn%

Map
tip!1 e& el tip! de la EllaveF, tip!% e& el tip! de l!& element!&

e t!r per! n! &e a

ede a l!& element!& mediante un ndi e &in! mediante un val!r ual3uiera(enter!, ve t!r, &tring, pa

ipo%! tipo8> ?;

tring! int> ?;

2*$%; 2*$8;

2uno - dos $ 2<<?)2uno2* - ?)2dos2*<<endl; 2cero $ 2<<?)2cero2*<<endl;

! el map"

tring! int> :: iterator it;

$?+begin(); it;$?+end(); it--) ut<<it/>4irst<<2 2<<it/>second<<endl;

t!& &e guardan !rdenad!& al igual 3ue en el &et, el a

e&! e& en C(l!gn)

ment!& a un ve t!r"
< pair <tipo%! tipo8> > v(?+begin()! ?+end());

Iueue
struct nodo { int ind! dist; nodo() {} nodo(int n%! int n8) { ind $ n%; dist $ n8; } };

Declaracin" : Mtodos:
queue <nodo> @;

@+push(q); .. /0adir un elemento al final de la cola nodo q $ @+4ront(); .. "btener el elemento del frente @+pop(); .. *orrar el elemento del frente

I.empty()J

.. 1 si la cola esta vac2a$ ' si tiene alg&n elemento

pri!rityK3ueue
struct nodo { int ind! dist; nodo() {} nodo(int n%! int n8) { ind $ n%; dist $ n8; } }; bool operator <(nodo a! nodo b) { return a+dist > b+dist; }

Declaracin" : Mtodos:
priorit'.queue <nodo> @;

@+push(q); nodo q $ @+top(); @+pop();

.. /0adir un elemento al final de la cola .. "btener el elemento con mayor prioridad #menor distancia% .. *orrar el elemento del frente .. 1 si la cola esta vac2a$ ' si tiene alg&n elemento

@+empt'();

Das könnte Ihnen auch gefallen