2016-04-26 5 views
0

Ich habe Vektor wie folgt v = {1, 0, 1} Ich möchte jedes Element mit anderen tauschen und einen Vektor jedes Mal zurückgeben, wenn die beiden Elemente sägten. Für dieses Beispiel sollte die Lösung lauten: v1 = {0, 1, 1}, v2 = {1, 0, 1}, v3 = {1, 0, 1}. Ich habe wie sein aber ich dit das gleiche Ergebnis:Tauschen Sie ein Element mit allen anderen in Vektor

for (size_t i = 0; i < tempSol.size() - 1; ++i) { 
    for (size_t j = i + 1; j < solution.size(); ++j) { 
      swap(tempSol[i], tempSol[j]); 
      listSolution.push_back(tempSol); 
    } 
} 

Das Ergebnis ist: v1 = {0, 1, 1}, v2 = {1, 1, 0}, v3 = {1, 0, 1} der Unterschied in Vektor v2. Vielen Dank für Ihre Hilfe

+2

Ihre Frage ist unklar. Sie haben drei Elemente im Vektor. Welche Gegenstände tauschen Sie aus? Wann tauscht ihr sie? Ihre "falsche" Antwort macht so viel Sinn wie Ihre "richtige" Antwort. – PaulMcKenzie

+0

Ich beginne mit dem firt Element und vertausche es mit allen anderen, zum Beispiel i = 0, j = 1 Ich tausche das Element swap (tempSol [0], tempSol [1]) –

+0

Suchen Sie nach 'std :: next_permutation '? (http://en.cppreference.com/w/cpp/algorithm/next_permutation) – Kevin

Antwort

0

Ihr Problem rührt von der Tatsache her, dass Sie Ihren ursprünglichen Vektor mutieren, also tauschen Sie später bereits vertauschte Werte aus.

Sie müssen:

  1. bei jeder Iteration Ihre Vektor kopieren.
  2. Machen Sie den Tausch auf dieser Kopie.
  3. Fügen Sie (oder, besser, verschieben) mutierte Kopie in Ihre Liste ein.
+0

Danke, ich habe das Problem gelöst. –

0

Es scheint, als ob Sie Code richtig sind, aber Ihre Logik ist ausgeschaltet. In Ihrem gewünschten Ergebnis führen Sie den ersten Swap zweimal durch, im Code-Ergebnis führt er nur einmal den ersten Swap aus, was ich für die eigentliche Absicht halte. Es wäre einfacher zu konzeptualisieren, wenn der Vektor eine Karte mit Schlüsseln wäre. Zum Beispiel: v = {eins: 1, zwei: 0, drei: 1} v1 = {zwei: 0, eins: 1, drei: 1} v2 = {drei: 1, eins: 1, zwei: 0}. Oder vielleicht angenommen, ich wäre ein Zeiger auf die erste Sache in dem Vektor und dass es mit dem Swap bewegen würde. Dies funktioniert nicht wie implementiert, es wird weiterhin auf das erste Element zugreifen, das nach dem ersten Austausch zu 0 wird.

+0

Das Ergebnis sollte wie folgt aussehen: v1 = {zwei: 2, eins: 1, drei: 3}, v2 = {drei: 3, zwei: 2, eins: 1}, v3 = {eins: 1, drei: 3, zwei: 2} –

Verwandte Themen