J'ai lu ici et d'autres endroits qui, lors de l'itération d'une STD :: Vecteur Utilisation des index Vous devriez:
std::vector<double>::size_type
5 Réponses :
En général, la norme C ++ ne donne pas de telles garanties: aucune égalité de taille_types pour des conteneurs paramétrés différemment, ni égalité à taille_t. p>
+1. Et vous aviez raison, le std :: size_t code> est garantie pour seulement allocataires. Je pensais
std :: vecteur :: Taille_type cod> devait être égal à
allocator :: Taille_type code>, mais apparemment pas.
@avakar: La situation est que l'allocator standard utilise Taille_t pour sa taille_type, et toutes les implémentations connues des conteneurs standard transmettent le Taille_Type à partir de leur allocator associé. En conséquence, sauf si vous écrivez votre propre allocator, cela va être Taille_T. D'une perspective pratique, Taille_T va essentiellement fonctionner, peu importe ce qu'ils utilisent comme taille_type - par exemple. :: Opérateur Nouveau Code> Utilise Taille_T pour la taille de l'allocation, et essentiellement toute autre allocation passe à travers celle (au moins par défaut).
Oui, pour presque tous les fins pratiques, vous pouvez simplement utiliser STD :: Taille_T. Bien qu'il y ait (en quelque sorte) une intention que différents conteneurs puissent utiliser différents types pour leurs tailles, il est toujours essentiellement garanti que (au moins pour les conteneurs standard) Taille_Type est identique à Taille_T.
Alternativement, vous pouvez envisager d'utiliser un algorithme , quelque chose comme: p>
Eh bien, je pense que:
for (std::vector<int>::size_type i = 0; i < x.size(); i++){
@Neil, aime le "Conseil de la perfection". J'utilisais sans signé Int mais la lecture de choses comme ceci: Stackoverflow. com / questions / 409348 / Itération-Over-Vector-in-C , fait que nous nous inquiétions. Probablement des inquiétudes non nécessaires.
@Neil: Vous ne vivrez jamais aussi longtemps - personne ne veut être blâmé perfectionniste, je suppose :-d
@Mark Si vous utilisez un type non signé, vous allez bien, IMHO. La réponse de LitB à la question que vous avez liée est (bien sûr) correcte, mais vous devez vraiment aimer taper (dans les deux sens) pour utiliser Taille_Type.
Je pense que vous pouvez supposer en toute sécurité que La documentation SGI et cette source http://www.cplusplus.com/reference/ stl / vecteur / semble être d'accord sur le point. P>
Vous voudrez peut-être aussi consulter cette solution pour votre problème: http: //rosetacde.org/wiki/loopode_multiple_arrays_simultanément#c.2b.2b P>
J'espère que cela vous aidera. P> ze_type code> est un entiteur non signé non signé. Vous ne pouvez pas compter sur beaucoup d'au-delà de cela. Bien sûr, la plupart des conteneurs ont un
taille_type code> qui est identique à celui
taille_t code> mais il n'y a pas de garantie. P>
Vous devez utiliser des itérateurs plutôt car il n'y a aucune garantie que uze_type serait le même type interne, de toute façon, pour std :: vecteur code> vous pouvez itérer en utilisant
non signé INT code> p> p>
Pourquoi ne pas incrémenter j code> dans le corps de contrôle? Et vous souffrez aussi de ne pas utiliser de
max code> ou
extrémité code> pour vérifier la fin de l'itération ... Stick avec
pour_ache code> vraiment;)
@MatthiEUM, comment pouvez-vous utiliser pour acheter lorsque vous devez faire itérair deux vecteurs différents? Évidemment, cet exemple est TRITE et les boucles peuvent être séparées, je ne peux pas penser à un moyen de le faire pour x [i] = y [i] + 3
Si vous avez été enseigné à propos de cela, vous avez mal appris. Outre le
i ++ code> que tout compilateur décent doit optimiser à un
++ i code>, vous appelez toujours
x.Size () code> à chaque tour de la boucle, que si elle est non triviale et non inine est inutile.
@Matthieu, juste un exemple rapide et sale pour illustrer ma question. Je devrais aussi utiliser des itérateurs et ne pas le faire par index.