java - C++ STL迭代器声明的iterator和reverse_iterator实质区别?是不同数值吗?
PHP中文网
PHP中文网 2017-04-18 10:47:50
0
2
819

问1:Vector<int>::reverse_iterator r1和Vector<int>::iterator r2。
r1和r2作用是截然不同的,这个:reverse_iterator和iterator实质是不同数值吗,为什么会有这个作用?

问2:ostream_iterator<int,char>out_iter(cout," ");括号(cout," ")是什么意思,这是个构造函数?为什么cout能给int赋值?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(2)
PHPzhong

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;

洪涛
  1. 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

  2. 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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal