0 votes

C++ vector<T>::iterator operator +

J'ai un itérateur qui pointe sur un élément d'un vecteur, et je voudrais le comparer à l'élément suivant du vecteur.

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ù se trouve foo :

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 la solution, mais il semble que ce ne soit pas le cas. Y a-t-il un moyen de contourner ce problème ?

Merci

3voto

rlbond Points 24215

current + 1 est valable pour les itérateurs à accès aléatoire (qui incluent les itérateurs vectoriels), et c'est l'itérateur après current (c'est-à-dire ce que vous pensez qu'il fait). Vérifiez (ou postez !) votre code de comparaison, vous faites probablement quelque chose de mal là-dedans.

1voto

sbi Points 100828

std::vector a accès aléatoire itérateurs. Cela signifie qu'ils sont aussi polyvalents que les pointeurs. Ils fournissent une arithmétique de pointeur complète ( it+5 , it+=2 ) et les comparaisons autres que != / == (c'est-à-dire, < , <= , > y >= ).

La comparaison entre les itérateurs dans votre code devrait certainement fonctionner, 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
}

Si cela ne fonctionne pas pour vous, c'est que vous avez probablement fait quelque chose de mal. Malheureusement, "...ne me donne pas l'élément suivant du vecteur..." ne nous donne aucun indice sur ce que vous essayez, il est donc difficile de deviner ce qui ne va pas.

0voto

R Samuel Klatchko Points 44549

Il s'agit peut-être d'une erreur de frappe, mais votre code fait référence à Vector tandis que le conteneur standard est vector (V minuscule).

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X