2010-04-13 8 views
0

Im tenant un itérateur qui pointe vers un élément d'un vecteur, et je voudrais le comparer à l'élément suivant du vecteur.C++ vector <T> :: opérateur d'itérateur +

Voici ce que j'ai

Class Point{ 
public: 
float x,y; 
} 

//Somewhere in my code I do this 

vector<Point> points = line.getPoints(); 

foo (points.begin(),points.end()); 

où foo est:

void foo (Vector<Point>::iterator begin,Vector<Point>::iterator end) 
{ 
    std::Vector<Point>::iterator current = begin; 

    for(;current!=end-1;++current) 
    { 
     std::Vector<Point>::iterator next = current + 1; 

     //Compare between current and next. 
    } 
} 

Je pensais que cela fonctionnerait, mais current + 1 ne me donne pas l'élément suivant du vecteur.

Je pensais que l'opérateur + était le chemin à parcourir, mais cela ne semble pas le cas. Y at-il une solution de contournement à ce sujet?

THanks

+2

Pourriez-vous montrer plus en détail pourquoi vous pensez que 'next' ne fait pas référence à l'élément après le courant? –

+2

Pouvez-vous clarifier "mais le + 1 ne me donne pas l'élément suivant du vecteur". ? – Naveen

+0

Cela semble très bien –

Répondre

3

current + 1 est valable pour itérateurs d'accès aléatoires (qui comprennent itérateurs vecteur), et il est l'itérateur après que le courant (à savoir ce que vous pensez qu'il fait). Vérifiez (ou postez!) Votre code de comparaison, vous faites probablement quelque chose de mal là-dedans.

+0

En effet. La solution? 1) Demander sur S.O, 2) Dormir. – Tom

1

std::vector a accès aléatoire itérateurs. Cela signifie qu'ils sont, au fond, aussi polyvalents que des pointeurs. Ils fournissent un pointeur arithmétique entière (it+5, it+=2) et des comparaisons autres que !=/== (à savoir, <, <=, > et >=).

Comparaison entre les itérateurs dans votre code devrait certainement travailler, mais serait absurde:

for(std::vector<Point>::iterator current = begin;current!=end-1;++current) 
{ 
    std::vector<Point>::iterator next = current + 1; 

    assert(current!=next); // always true 
    assert(current<next); // also always true 
} 

Donc, si cela ne fonctionne pas pour vous, il est probable que vous faites quelque chose de mal. Malheureusement, "... ne me donne pas le prochain élément du vecteur ..." ne nous donne aucune idée de ce que vous essayez, donc il est difficile de deviner ce que vous pourriez faire de mal.

+0

courant ne devrait pas pointer vers le dernier élément de cette boucle, bien qu'une vérification de 'begin! = End' pourrait être dans l'ordre. – visitor

+0

@visitor: Oui, vous avez raison. J'ai copié la condition de fin de boucle sans même la regarder. '' – sbi

0

Peut-être que c'est juste une faute de frappe, mais votre code fait référence à Vector tandis que le conteneur standard est vector (minuscule V).

Mais si ce n'est pas une faute de frappe dans votre question, sans voir la définition de Vector, il n'y a aucun moyen de dire ce que cela fait.