Hejo,
Próbuję od niedawna zrobić swoją własną implementację funkcji split()
, która działa tak samo jak ta z Pythona. Czyli: przekazywany jest dowolny łańcuch z którego się wyciąga pojedyncze wyrazy i wrzuca do kontenera, a funkcja gotowy kontener zwraca. Póki co mam w kodzie workarounda używającego std::istringstream
i działa tak jak powinien, ale zastanawiam się w jaki sposób zaimplementować to używając stl'a.
aktualne rozwiązanie:
template<typename T, typename C = std::vector<T>>
C split(T& str) {
C vTemp;
std::istringstream iss{str};
std::copy(std::istream_iterator<std::string>{iss}, std::istream_iterator<std::string>{}, std::back_inserter(vTemp));
return vTemp;
}
kombinuję z różnymi wariacjami std::find()
, ale nie wiem jak przerobić cały łańcuch na raz - w sensie, który algorytm będzie na bieżąco wrzucał do kontenera słowa oddzielone spacją? zastanawiałem się też nad std::copy_if
, ale nie mam pomysłu na predykat. Macie jakieś fajne pomysły na algorytmy lub predykaty?
Pozdro!