23 kwietnia 2009
Kategorie: programowanie | Tagi: algorithm, C++, code, STL
komentarze: 0
Zbiór gotowych algorytmów z standardowej biblioteki języka C++ jest bardzo użyteczny, o tym nie trzeba długo przekonywać. Choć czasem chcąc wykonać kilka rzeczy, bądź kilka kolejnych algorytmów na tych samych danych, możemy stracić na optymalności, szczególnie jak danych jest wiele, a złożoność algorytmu liniowa. Czasem warto napisać coś dedykowanego, lub połączyć 2 algorytmy, oczywiście na [...]
czytaj całość »
1 kwietnia 2009
Kategorie: programowanie | Tagi: algorithm, C++, code, metaprogramowanie, STL
komentarze: 4
Często w programach napisanych w C do pobierania rozmiaru tablic alokowanych przez kompilator na stosie stosuje się prostą konstrukcję z operatorem sizeof, opakowana w makro: #define SizeOfArray(array) sizeof(array) / sizeof(array[0]) W C++ zamiast makra lepiej wykorzystać wzorzec, a wtedy można to przedstawić tak: template<typename T, size_t N> inline size_t SizeOfArray(const T (&)[N]) { return N; [...]
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ść »
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: 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ść »
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ść »
8 listopada 2008
Kategorie: programowanie | Tagi: C++, code, eksperymenty, iterator, pointers, STL
komentarze: 5
Czym jest iterator w STL każdy wiedzieć powinien. Mogę wspomnieć ze jest to typ z zachowaniem podobnym do wskaźnika, który służy do poruszania się po kontenerach biblioteki standardowej, ale nie jest to wskaźnik, mimo iż w większości implementacjach jest to opakowany w obiekt wskaźnik. Kilka flejmów na ten temat można znaleźć w usenetowych archiwach pl.comp.lang.c [...]
czytaj całość »
5 listopada 2008
Kategorie: programowanie | Tagi: C++, C++0x, code, lambda, STL
komentarze: 0
Wspominałem nie tak dawno o szukaniu w STLowych kontenerach za pomocą funkcji find_if. Przedstawiłem tam kilka sposób wykorzystania tego algorytmu i prosty funktorów na bazie bibliotek STL i boost. Dzięki nadchodzącemu wielkimi krokami nowemu standardowi C++0x, pisanie prostych predykatów stanie się wkrótce jeszcze prostsze dzięki funkcjom i wyrażeniom lambda. Nie trzeba będzie pisać prostych funktorów, [...]
czytaj całość »
10 września 2008
Kategorie: programowanie | Tagi: boost, C++, code, predicate, STL
komentarze: 4
Nieraz zdarza się, ze przechowujemy w kontenerach STL-owych niebanalne obiekty, czy typy nieco bardziej rozbudowane od typów wbudowanych. Załóżmy, że mamy prosty vector wypełniony prostymi obiektami o budowie zbliżonej do następującej struktury: struct MyObj{ int foo; int bar; std::string name; }; I chcielibyśmy wyszukać w nim element o nazwie „foo”. Oczywiście najprostszym i najszybszym rozwiązaniem [...]
czytaj całość »