copy_if
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 – C++0x, także błąd powinien zostać naprawiony.
Tymczasem możemy korzystać z bardzo prostej implementacji tego algorytmu:
template<typename InIter, typename OutIter, typename Pred> OutIter copy_if(InIter first, InIter last, OutIter result, Pred pred) { while (first != last) { if (pred(*first)) *result++ = *first; ++first; } return result; } |
Inną, bardzo ciekawą koncepcję rozwiązania problemu copy_if oraz innych algorytmów warunkowych przedstawił Łukasz Czerwiński w notce Algorytmy warunkowe.
Innym popularnym dziwactwem STL-a jest niemożność otwarcia strumienia plikowego przez podanie nazwy pliku w postaci standardowego typu napisowego string, dostarczanego przez tą bibliotekę. Konstruktor klasy ofstream przyjmuje tylko C-style string, czyli wskaźnik na tablice znków – char*, niekonsekwencję tą powinien naprawić nadchodzący standard.