it-swarm.com.de

C ++ versucht, Werte in einem Vektor auszutauschen

Das ist meine Tauschfunktion:

template <typename t>
void swap (t& x, t& y)
{
    t temp = x;
    x = y;
    y = temp;
    return;
}

Und das ist meine Funktion (auf einer Seite, auf der v Strings speichert), Werte auszutauschen, aber wenn ich versuche, Werte in einem Vektor zu verwenden, erhalte ich eine Fehlermeldung. Ich bin mir nicht sicher, was ich falsch mache.

swap(v[position], v[nextposition]); //creates errors
45
user782311

Ich denke, was Sie suchen, ist iter_swap , das Sie auch in <algorithm> Finden können.
Alles, was Sie tun müssen, ist, zwei Iteratoren zu übergeben, die jeweils auf eines der Elemente zeigen, die Sie austauschen möchten.
Da Sie die Position der beiden Elemente haben, können Sie Folgendes tun:

// 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

Beide vorgeschlagenen Möglichkeiten (std::swap und std::iter_swap) funktionieren, sie haben nur eine etwas andere Syntax. Tauschen wir das erste und zweite Element eines Vektors aus, v[0] und v[1].

Wir können basierend auf den Inhalten der Objekte tauschen:

std::swap(v[0],v[1]);

Oder Swap basierend auf dem zugrunde liegenden Iterator:

std::iter_swap(v.begin(),v.begin()+1);

Versuch es:

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;
}

In beiden Fällen werden die ersten beiden Elemente getauscht:

2 1 3 4 5 6 7 8 9
42
linse

Da ist ein std::swap in <algorithm>

21
Ólafur Waage

nach Übergabe des Vektors durch Referenz

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

erzeugt das erwartete Ergebnis.

4
faro_hf