C++ probeert waarden in een vector om te wisselen

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_swapdie 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::swapen 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::swapin <algorithm>


Antwoord 4, Autoriteit 4%

na het passeren van de vector met Zoeken

swap(vector[position],vector[otherPosition]);

zal het verwachte resultaat.

Other episodes