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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *