Ceci est ma fonction d'échange:
template <typename t>
void swap (t& x, t& y)
{
t temp = x;
x = y;
y = temp;
return;
}
Et ceci est mon appel de fonction (sur une note latérale v stocke des chaînes) pour échanger des valeurs, mais chaque fois que j'essaie d'appeler en utilisant des valeurs dans un vecteur, une erreur se produit. Je ne suis pas sûr de ce que je fais mal.
swap(v[position], v[nextposition]); //creates errors
Je pense que ce que vous recherchez est iter_swap
que vous pouvez trouver aussi dans <algorithm>
.
tout ce que vous avez à faire est de simplement passer deux itérateurs, chacun pointant sur l’un des éléments que vous souhaitez échanger.
puisque vous avez la position des deux éléments, vous pouvez faire quelque chose comme ceci:
// assuming your vector is called v
iter_swap(v.begin() + position, v.begin() + next_position);
// position, next_position are the indices of the elements you want to swap
Les deux possibilités proposées (std::swap
et std::iter_swap
) fonctionnent, leur syntaxe est légèrement différente. Échangeons les premier et deuxième éléments d'un vecteur, v[0]
et v[1]
.
Nous pouvons échanger en fonction du contenu des objets:
std::swap(v[0],v[1]);
Ou échangez sur l'itérateur sous-jacent:
std::iter_swap(v.begin(),v.begin()+1);
Essayez le:
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9};
std::vector<int> * v = new std::vector<int>(arr, arr + sizeof(arr) / sizeof(arr[0]));
// put one of the above swap lines here
// ..
for (std::vector<int>::iterator i=v->begin(); i!=v->end(); i++)
std::cout << *i << " ";
std::cout << std::endl;
}
Les deux fois, vous obtenez les deux premiers éléments échangés:
2 1 3 4 5 6 7 8 9
Il y a un std::swap
dans <algorithm>
après avoir passé le vecteur par référence
swap(vector[position],vector[otherPosition]);
produira le résultat attendu.