Dit is mijn wisselfunctie:
template <typename t>
void swap (t& x, t& y)
{
t temp = x;
x = y;
y = temp;
return;
}
En dit is mijn functie (op een kanttekening v slaat strings op) aanroep om waarden te wisselen, maar telkens wanneer ik probeer te bellen met waarden in een vector, krijg ik een foutmelding. Ik weet niet zeker wat ik verkeerd doe.
swap(v[position], v[nextposition]); //creates errors
Antwoord 1, autoriteit 100%
Ik denk dat u op zoek bent naar iter_swap
die u ook kunt vinden in <algorithm>
.
het enige dat u hoeft te doen, is twee iterators doorgeven die elk wijzen op een van de elementen die u wilt uitwisselen.
aangezien je de positie van de twee elementen hebt, kun je zoiets als dit doen:
// 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
Antwoord 2, autoriteit 46%
Beide voorgestelde mogelijkheden (std::swap
en std::iter_swap
) werken, ze hebben alleen een iets andere syntaxis.
Laten we het eerste en tweede element van een vector verwisselen, v[0]
en v[1]
.
We kunnen wisselen op basis van de inhoud van het object:
std::swap(v[0],v[1]);
Of swap op basis van de onderliggende iterator:
std::iter_swap(v.begin(),v.begin()+1);
Probeer het:
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;
}
Beide keren krijg je de eerste twee elementen verwisseld:
2 1 3 4 5 6 7 8 9
Antwoord 3, Autoriteit 20%
Er is een std::swap
in <algorithm>
Antwoord 4, Autoriteit 4%
na het passeren van de vector met Zoeken
swap(vector[position],vector[otherPosition]);
zal het verwachte resultaat.