Dzisiaj trochę inny temat, a mianowicie Boost. Czym jest Boost chyba nie muszę tłumaczyć, a Ci którzy nie wiedzą niech zajrzą tutaj. Na początek coś prostego: biblioteka Array.
Biblioteka Array wchodzi w skład TR1, jest kontenerem (takim jak vector), który (w przeciwieństwie do vector) ma za zadanie trzymać tablicę o stałym rozmiarze. Można ją inicjalizować jak zwykłą tablicę, nieinicjalizowana będzie posiadała „śmieciowe” wartości. Jeżeli przy inicjalizacji podamy mniej wartości niż rozmiar naszej tablicy, to pozostałe elementy zostaną wypełnione wartościami dymyślnymi:
1 2 3 4 | #include <boost /array.hpp> boost::array<int , 5> a = {1, 2, 3}; boost::array</int><int , 5> b; |
A teraz jakie możliwości dostarcza nam klasa Array. Oczywiście są to iteratory, zarówno „normalne” jak i odwrotne:
1 2 | cout < < *(a.begin()) << endl; // iterator dla pierwszego elementu cout << *(a.rend() - 1) << endl; // odwrotny iterator dla pozycji za ostatnim elementem w odwrotnej iteracji |
Możemy również się dowiedzieć czegoś na temat rozmiarów tablicy:
1 2 3 | cout < < a.size() << endl; // wypisze rozmiar tablicy, czyli w tym przypadku 5 cout << (a.empty() ? "Brak elementów" : "Są elementy") << endl; cout << a.max_size() << endl; // również wypisze 5, gdyż nie możemy zmienić rozmiaru tablicy |
Czymże by była tablica bez możliwości dostania się do poszczególnych elementów?
1 2 3 4 | a[2] = 10; cout < < a[2] << endl; a.at(1) = 15; cout << a.at(1) << endl; |
różnica między operatorem [] a metodą at() jest taka, że at() sprawdza czy nie przekroczyliśmy zakresu, a jeżeli tak to rzuca wyjątek std::range_error. Są jeszcze metody jak front() oraz back(), które zwracają referencję, odpowiednio, pierwszego i ostatniego elementu tablicy. Oprócz tego mamy jeszcze dwie metody zwracające wskaźnik do tablicy:
1 2 | a.data(); // read-only a.c_array(); // tablica w stylu C - odczyt i zapis |
Do tego dostajemy jeszcze możliwość zamiany tablic między sobą oraz wypełnienia ich konkretną wartością:
1 2 3 | a.swap(b); // zamienia tablice między sobą swap(a, b); // również zamienia tablice między sobą a.assign(1); // wypełnia całą tablicę podaną wartością |
Oczywiście tablice muszą być takich samych rozmiarów i typów. Mamy jeszcze odpowiednie operatory porównania (==, !=, <, >, <=, >=), ale chyba nie ma sensu się nad nimi rozpisywać. Każdy powinien wiedzieć jak z nich korzystać. :)

może coś jeszcze o boost? Czemu to takie popularne i potrzebne(coś praktycznego) + kolejne biblioteki? Wygląda na bardzo przydatne ;-)