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)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/