J’utilise .at() tout simplement parce que je pensais que c’était le seul moyen d’accéder à la valeur d’un élément depuis un pointeur… j’utilise donc myVec->at(i)
Ce sera (*myVec)[i]
donc, mais sache que manipuler des vecteurs via des pointeurs est totalement contre nature. Un vecteur est déjà une abstraction de pointeur, et en C++ moins on manipule directement les pointeurs, mieux on se porte en général.
Si c’est pour du passage de paramètre, utilise alors des références. Les vecteurs étant eux crées directement dans leur destination (sur la pile, ou comme membres), sans le moindre appel à new
.
(comme le code que tu me proposes d’ailleurs, et que je n’arrive pas à compiler).
Vu la syntaxe que j’ai employée, il faut compiler en C++14. Je vérifie sur godbolt… et pardon c’est ma faute, j’avais mélangé itérateurs avec pointeurs. Cela deviendrait donc https://godbolt.org/z/x693v7xfq Mais ce ne serait pas ce qu’il te faut, cf plus bas.
Je vais essayer de prendre le temps pour comprendre ces fonctions mais je coince au niveau des [] return …
C’est des lambdas, introduites en C++11 (mais que j’utilise en syntaxe 2014 pour me simplifier la vie). Elle sont expliquées sur le tuto de ce site que je ne peux que recommander.
Le modulo est bien à sa place, puisque je cherche à additionner les deux derniers chiffres du .Z
Et sur le Z courant, tu n’appliques pas le modulo? (EDIT: effectivement non!)
Du coup dans mon code il faut virer le modulo final et bouger le modulo dans la lambda d'accumulate
.
—> https://godbolt.org/z/EWY95db9v
Mais cet algorithme de tri ne va-t-il pas prendre autant de temps ?
Il pendra bien moins de temps AMA que les N² déplacements en moyenne que ton algo actuel déclenche.
Mais… je regarde ton fichier et les points sont déjà triés en X… Comme je disais la fusion peut alors se faire linéairement par adaptation de l’algo std::remove()
pour qu’il merge les Z à la volée en plus de seulement bouger le curseur de lecture en cas de valeur équivalente. Je regarde ça sur godbolt et j’éditerai mon message.
EDIT: hop: https://godbolt.org/z/ojvje9nbK (Après je ne l’ai pas testé sur des vraies données; il faudrait des tests unitaires et perfs ensuite)
EDIT2: correction: https://godbolt.org/z/rKeTThqd8
EDIT3: https://godbolt.org/z/oahMWPrro
EDIT4: On va y arriver: https://godbolt.org/z/M78sYcPff et j’avais oublié un +1 pour la partition