można przekazać wskaźniki do algorytmów jak std::sort
, std::find
lub std::copy
. Są to szablony konfigurowalne dla wszystkiego, co działa jako odpowiedni iterator.
Nie oznacza to, że różne iteratory muszą się nawzajem przekształcać.
Metoda erase
kontenera std::vector<int>
może pracować z iteratorami tylko z elementami tego samego wektora. Jak zostało wskazane może być realizowany jako wskaźnik, ale zwykle nie jest, z powodów podanych tutaj: C++ std::vector<>::iterator is not a pointer, why?
Rozważmy std::find
:
template< class InputIt, class T >
InputIt find(InputIt first, InputIt last, const T& value);
Tutaj InputIt
jest parametrem szablonu. Szablon std::find
będzie działał z każdym typem iteratora, który spełnia wymagania input iterator, a którego operator*
zwraca coś, co można porównać do typu T
. Wskaźniki działają tutaj dobrze. Jak zauważył Fire Lancer w komentarzu, zarówno first
i last
musi być typu InputIt
.
teraz porównać do std::vector::erase:
iterator erase(const_iterator pos);
To trwa const_iterator
, który jest jednym z typedefs klasy std::vector
. Jest to jeden szczególny typ iteratora, a nie parametr szablonu.
Dlaczego myślisz, że wskaźnik do elementu jest taki sam jak iterator ('std :: vector :: iterator')? –
NathanOliver
Jaki błąd dostałeś? –
Podczas gdy iteratory mogą być implementowane za pomocą wskaźników, wskaźnik nie jest automatycznie iteratorem. –