Question 1 reverse_iterator et iterator sont deux types d'itérateurs définis dans le modèle de classe vectorielle. L'implémentation peut être de différentes classes, telles que :
template </* ... */>
class vector {
public:
class ReverseIterator {...};
class Iterator {...};
using reverse_iterator = ReverseIterator;
using iterator = Iterator;
};
Le sens d'itération de
reverse_iterator est opposé à celui de iterator. Autrement dit, si r1 et r2 pointent vers le même élément, r1+1 et r2-1 pointent vers le même élément (s'ils sont valides, et ils surchargent respectivement operator+ et operator-).
La direction opposée de l'itération est obtenue grâce à différentes implémentations d'opérateurs. Si l'itérateur est implémenté en interne par un pointeur, l'implémentation operator++ de reverse_iterator peut décrémenter le pointeur, et l'implémentation operator++ de l'itérateur peut incrémenter le pointeur.
Question 2 ostream_iterator<int, char> out_iter(cout, " "); déclare et définit une variable, et initialise directement la variable. (cout, " ") est la liste réelle des paramètres. Le compilateur essaiera de choisir un constructeur basé sur cette liste de paramètres et de « transmettre » ces paramètres au constructeur.
Selon la norme, cout ne peut pas attribuer de valeur à int. Veuillez fournir le code correspondant. Mais cout peut être converti en type bool (après c++11) ou void * (avant c++11). En effet, le type de cout hérite d'une instance de basic_ios et le modèle de classe basic_ios utilisé pour instancier l'instance définit l'opérateur de conversion approprié. Autrement dit, bool x = std::cout;
Que sont deux valeurs numériques ? . reverse_iterator et iterator sont des itérateurs, essentiellement deux modèles de classe réalisent des fonctions différentes en réimplémentant différents détails de la fonction à l'intérieur de la classe, mais l'interface externe est la même
instancie un objet out_iter, le type est ostream_iterator<int,char> et les paramètres passés dans le constructeur sont cout et " "
Le sens de la phrase "cout peut attribuer une valeur à int" n'est pas clair
Question 1
Le sens d'itération dereverse_iterator et iterator sont deux types d'itérateurs définis dans le modèle de classe vectorielle. L'implémentation peut être de différentes classes, telles que :
reverse_iterator
est opposé à celui deiterator
. Autrement dit, si r1 et r2 pointent vers le même élément,r1+1
etr2-1
pointent vers le même élément (s'ils sont valides, et ils surchargent respectivementoperator+
etoperator-
).La direction opposée de l'itération est obtenue grâce à différentes implémentations d'opérateurs. Si l'itérateur est implémenté en interne par un pointeur, l'implémentation
operator++
de reverse_iterator peut décrémenter le pointeur, et l'implémentationoperator++
de l'itérateur peut incrémenter le pointeur.Question 2
ostream_iterator<int, char> out_iter(cout, " ");
déclare et définit une variable, et initialise directement la variable.(cout, " ")
est la liste réelle des paramètres. Le compilateur essaiera de choisir un constructeur basé sur cette liste de paramètres et de « transmettre » ces paramètres au constructeur.Selon la norme, cout ne peut pas attribuer de valeur à int. Veuillez fournir le code correspondant. Mais cout peut être converti en type bool (après c++11) ou void * (avant c++11). En effet, le type de cout hérite d'une instance de basic_ios et le modèle de classe basic_ios utilisé pour instancier l'instance définit l'opérateur de conversion approprié. Autrement dit,
bool x = std::cout;
Que sont deux valeurs numériques ? .
reverse_iterator
etiterator
sont des itérateurs, essentiellement deux modèles de classeréalisent des fonctions différentes en réimplémentant différents détails de la fonction à l'intérieur de la classe, mais l'interface externe est la même
instancie un objet
out_iter
, le type estostream_iterator<int,char>
et les paramètres passés dans le constructeur sontcout
et" "
Le sens de la phrase "cout peut attribuer une valeur à int" n'est pas clair