Wpis z mikrobloga

Mirki programysty. Która wersja bardziej Wam leży i dlaczego?
1.
std::vector v;
using vIter = decltype(v)::iterator;
void f(vIter it){}
2.
std::vector v;
void f(std::vector::iterator it){}
3.
std::vector v;
void f(decltype(v)::iterator it){}

#cpp
  • 16
@vydyah: Bo jak pisze funkcje, która ma przyjmować iterator po wektorze to nie chcę żeby akceptowała również const iteratory, iteratory po mapach, stringach i wszelkie inne jakie sobie tylko wymyślisz.
Jak piszesz funkcje, która ma przyjmować jako argument int'a to nie robisz template'a.
Template'y mają swoje zastosowanie jak piszesz genryczne funkcje, które mogą przyjmować różnego typu argumenty. Tutaj mamy konkretny, z góry ustalony typ i tylko taki chcemy akceptować.
@simia: ale co ty chcesz z tym iteratorem robić ? Może wystarczy ci, któryś ze standardowych algorytmów: for_each, find, transform, partition i do tego lambda ? Moim zdaniem funkcje, które przyjmują iteratory powinny być generyczne.

@simia: Idea iteratora polega na tym, ze masz jednakowy dostęp do różnych struktur danych, niezależnie od ich implementacji. A typ danych możesz bardzo łatwo sprawdzić sobie przez iterator_traits.
@wolodia: Jaki jest sens pisania funkcji generycznej tylko po to zeby potem ograniczac mozliwe typy tylko do jednego skoro moge to zrobic w sposob pokazany wyzej.
@nargil: Czasem niestety trzeba napisac troche logiki biznesowej w istniejacym ekosystemie.

@wolodia @nargil: Ja rozumiem, że bardzo chcecie rozwiązać coś co uważacie za problem ale tu nie chodzi o dyskusje o iteratorach i ich możliwym użyciu. Jeśli chcecie o tym pogadac to mozemy
Jaki jest sens pisania funkcji generycznej tylko po to zeby potem ograniczac mozliwe typy tylko do jednego skoro moge to zrobic w sposob pokazany wyzej.


@simia: Ja Ci wytłumaczyłem jaka jest mniej więcej idea iteratora. Nikt Ci nie broni go używać przy vectorze, ale nie po to został on stworzony.