Vous pouvez passer des pointeurs à algorithmes comme std::sort
, std::find
ou std::copy
. Ce sont des modèles qui sont configurables pour tout ce qui fonctionne comme un itérateur approprié.
Cela ne signifie pas que les différents itérateurs se convertissent nécessairement les uns aux autres.
La méthode erase
du conteneur std::vector<int>
ne peut fonctionner qu'avec des itérateurs d'éléments du même vecteur. Comme on l'a souligné ce qui peut être mis en œuvre comme un pointeur, mais il est généralement pas, pour des raisons énoncées ici: C++ std::vector<>::iterator is not a pointer, why?
Tenir compte std::find
:
template< class InputIt, class T >
InputIt find(InputIt first, InputIt last, const T& value);
Ici InputIt
est un paramètre de modèle. Le modèle std::find
fonctionnera avec n'importe quel type d'itérateur répondant aux exigences d'un input iterator, et dont le operator*
renvoie quelque chose qui peut être comparé au type T
. Les pointeurs fonctionnent bien ici. Comme Fire Lancer a fait remarquer correctement dans un commentaire, les deux first
et last
doivent être de type InputIt
.
Maintenant, comparez cela à std::vector::erase:
iterator erase(const_iterator pos);
Cela prend const_iterator
, qui est l'un des typedefs de la classe std::vector
. C'est un type particulier d'itérateur, pas un paramètre de modèle.
Pourquoi pensez-vous un pointeur vers l'élément est identique à un iterator ('std :: vector :: iterator')? –
NathanOliver
Quelle erreur obtenez-vous? –
Alors que les itérateurs peuvent être implémentés à l'aide de pointeurs, un pointeur n'est pas automatiquement un itérateur. –