Listing 1.1: (c.d. listingu z poprzedniej strony)
// strukturach danych STL.
15 #define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)
// Skrót - zamiast pisać push_back podczas wstawiania elementów na koniec // struktury danych, takiej jak vector, wystarczy napisać PB
16 #define PB push_back
// Podobnie - zamiast first będziemy pisali po prostu ST
17 #define ST first
// a zamiast second - ND.
18 #define ND second
Listing 1.2: Nagłówki bez komentarzy
01 #include <cstdio>
02 #include <iostream>
03 #include <algorithm>
04 #include <string>
05 #include <vector>
06 using namespace std;
07 typedef vector<int> VI;
08 typedef long long LL;
09 #define FOR(x, b, e) for(int x = b; x <= (e); ++x)
10 #define FORD(x, b, e) for(int x = b; x >= (e); —x)
11 #define REP(x, n) for(int x = 0; x < (n); ++x)
12 #define VAR(v, n) __typeof(n) v = (n)
13 #define ALL(c) (c).begin(), (c).end()
14 #define SIZE(x) ((int)(x).size())
15 #define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)
16 #define PB push.back
17 #define ST first
18 #define ND second
Oprócz nagłówków podstawowych, istnieje również wiele innych skrótów, które okazuję, się pomocne podczas rozwiązywania zadań. Omawiana w tej książce biblioteczka, oprócz nagłówków podstawowych, zawiera również dodatkowe makra, umieszczane tylko w tych programach, które z nich korzystają. Ich lista przedstawiona jest na listingu 1.3. W prezentowanych w książce programach będziemy odwoływali się zarówno do tych podstawowych, jak i dodatkowych nagłówków, bez informowania o konieczności dopisywania ich definicji do implementowanych programów. Dzięki takiemu podejściu, kody źródłowe przedstawianych w książce algorytmów są krótsze, a czytelnik nie musi analizować za każdym razem powtarzających się fragmentów kodu.
11