18 marca 2009
Kategorie: programowanie | Tagi: C++, code, templates, tree
komentarze: 0
Dziś kilka słów o mojej prostej strukturze TreeLinkedList. Jest to prosta drzewiasta struktura, jak sama nazwa wskazuje można ją sobie wyobrazić jako skrzyżowanie drzewa z listą, a dokładniej to hierarchiczne powiązanie drzewem kilku list, gdzie każda gałąź jest listą elementów, które są kolejnymi gałęziami. Twór ten jest bardzo zbliżony do B-tree, aczkolwiek nie posiada wszystkich [...]
czytaj całość »
10 marca 2009
Kategorie: programowanie | Tagi: array, C++, code, matrix, metaprogramowanie, templates
komentarze: 0
Kiedyś, prawie rok temu kombinowałem coś z dwuwymiarowymi tablicami dynamicznymi. W projekcie xime, lista kontaktów wykorzystuje prostą implementację takowej tablicy opartą na małym rozszerzeniu standardowego wektora. Tablica ta odzwierciedla widoczne w danej chwili w kontrolce elementy, zawiera wskaźniki, bądź proste elementy z wskaźnikami do elementów kontaktów umieszczonych w powiązanym drzewie, coś w stylu B-tree. Idea [...]
czytaj całość »
8 marca 2009
Kategorie: programowanie | Tagi: C++, code, idioms, metaprogramowanie, templates
komentarze: 11
Szablony są bardzo elastycznym elementem języka programowania, a ich wykorzystywanie jest bardzo użyteczne. Użycie ich pozwala redukować i minimalizować pisanie oraz powielanie kodu. Jak wiemy konkretyzacja dla danego typu wykonywana jest tylko do używanych metod w szablonach klas, przez co nie jest generowany niepotrzebny kod. Niestety generowany kod wynikowy jest już nieco rozbudowany. Każda konkretyzacja [...]
czytaj całość »
26 lutego 2009
Kategorie: programowanie | Tagi: algorithm, C++, code, metaprogramowanie, STL
komentarze: 0
Nic nie jest doskonałe, tak samo STL ma swoje braki i przeoczenia. W standardowej bibliotece języka C++ zabrakło bardzo użytecznego algorytmu – copy_if – kopiowania z predykatem. Prawdopodobnie został on usunięty przez przypadek z dostarczanych przez bibliotekę algorytmów generycznych, ale z tego co się orientuję, można znaleźć o nim wzmianki w drafcie nowego standardu – [...]
czytaj całość »
12 grudnia 2008
Kategorie: programowanie | Tagi: C++, code, metaprogramowanie, templates, turing
komentarze: 2
Wzorce języka C++ spełniają wszystkie założenia maszyny Turinga. Przemyślenia i próby udowodnienia powyższego sformułowania można znaleźć w pracy „C++ Templates are Turing Complete” autorstwa Todd L. Veldhuizen. Małą ciekawostkę na temat limitów w wzorcach możemy znaleźć na końcu artykułu: [...] the C++ standards committee allows conforming compilers to limit the depth of „recursively nested template [...]
czytaj całość »
26 listopada 2008
Kategorie: programowanie | Tagi: C++, code, iterator, STL, streams
komentarze: 0
Pisałem o numeric_limits jako zapomnianej części biblioteki numerycznej, dziś do tego „worka” mogę dorzucić iteratory strumieni jako rzadko używane „twory”. Niektórych może zdziwić ten fakt, że strumienie także posiadają iteratory, a ich wykorzystanie może bardzo nam pomoc i uprościć kod. Na początek najlepiej zapoznać się z tym co mówi dokumentacja na temat istream_iterator i ostream_iterator [...]
czytaj całość »
18 listopada 2008
Kategorie: programowanie | Tagi: boost, C++, code, type casting, type conversions
komentarze: 0
Korzystając z wzorca numeric_limits, o którym wspomniałem w poprzedniej notce i informacjach o min/max wartości danego typu numerycznego, można w bardzo łatwy sposób stworzyć sobie bezpieczny, odporny na underflow/overflow, „operator” – wzorzec do konwersji wartości liczbowych pomiędzy poszczególnymi typami numerycznymi. template <typename TargetType, typename SourceType> inline TargetType numeric_cast(SourceType arg) { if (arg < std::numeric_limits<TargetType>::min()) [...]
czytaj całość »
18 listopada 2008
Kategorie: programowanie | Tagi: C++, code, STL, templates
komentarze: 2
Standardowa biblioteka języka C++ zawiera wiele ciekawych i przydatnych narzędzi w codziennej pracy developera C++, a po wejściu w życie C++0x będzie jeszcze ciekawiej. Czasem nawet nie mamy świadomości lub zapominamy o ciekawych perełkach jakie można tam znaleźć. Jednym z zapomnianych i chyba rzadko używanych komponentów biblioteki STL jest szablon numeric_limits będący „odłamkiem” numerycznej części [...]
czytaj całość »
12 listopada 2008
Kategorie: programowanie | Tagi: C++, C++0x, code, metaprogramowanie, templates
komentarze: 0
Niedawno marudziłem o makrach i funkcjach ze zmienną liczbą argumentów, więc dziś do uzupełnienia tego tematu wspomnę kilka słów o wzorcach ze zmienną liczbą parametrów, czyli Variadic templates, które niebawem staną się oficjalną częścią standardu języka C++. Modelowa, prosta funkcja wzorcowa, która jako przykład występuje prawie w każdej wzmiance na temat „nowego ficzera”. template<typename T> [...]
czytaj całość »
8 listopada 2008
Kategorie: programowanie | Tagi: C++, code, eksperymenty, iterator, pointers, STL
komentarze: 0
Kontynuując temat konwersji wskaźnika do iteratora z poprzedniej notki, chciałbym rzucić nieco więcej światła i nowych spostrzeżeń jakie mnie naszły po popełnieniu wspomnianego wpisu, po którym nie mogłem spokojnie zasnąć ;) Rewidując ponownie ten problem pod katem wydajnościowym i nie tylko doszedłem do wniosku, że w ogóle taka operacja jest bez sensu, uzycie takiej operacji [...]
czytaj całość »