Algorytm copy_if
• tech • 174 słowa • 1 minuta czytania
Nic nie jest doskonałe. Tak samo C++ i STL ma swoje braki i różne przeoczenia. W standardowej bibliotece języka C++ zabrakło bardzo użytecznego algorytmu, jakim jest copy_if
, czyli kopiowania z predykatem.
Prawdopodobnie został on usunięty przez przypadek z dostarczanych przez bibliotekę algorytmów generycznych. Na szczęście z tego co się orientuję, można znaleźć o nim wzmianki w drafcie nowego standardu (C++0x), także jest szansa, że błąd ten zostanie naprawiony.
Tymczasem, jeśli jest potrzeba, to można 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.
Ciekawym, innym popularnym dziwactwem STL-a jest niemożność otwarcia strumienia plikowego przez podanie nazwy pliku w postaci typu napisowego string
jaki dostarcza ta biblioteka. Konstruktor klasy ofstream
przyjmuje tylko C-style string, czyli wskaźnik na tablice znaków - char*
, niekonsekwencję tę też powinien naprawić nadchodzący standard.
Komentarze (0)