2016-10-16 9 views
-3

Sagen Sie bitte den folgenden Vektor der Int die haben:Vektoriteration mit mehreren Bedingungen?

std::vector<int> V={5,4,3,2,1,6,7,8}; 

Ich brauche eine Form von Iteration zu schreiben, die alle abnehmend int die in einem separaten Vektor sowie die erste Erhöhung int vorantreiben wird.

Also für V vor, I {5,4,3,2,1,6}

Mein erster Gedanke zu verwenden, war eine for-Schleife:

std::vector<int> Results; 

for(int i=V.size(); i--;) 
{ 
    if(V[i]>V[i+1]){Results.push_back(V[i]);}; 
} 

jedoch seine an dieser Stelle Ich stecke fest, wie kann ich auch das erste steigende Element (in diesem Fall 6) zurückdrängen?

+0

Warum nicht alle abnehmenden und dann noch einen nach der Schleife kopieren? Außerdem macht Ihre aktuelle Schleife keinen Sinn. – krzaq

+0

Wenn Sie spezielle Randfälle haben, schreiben Sie sie in das OP. – StoryTeller

Antwort

1

Sie müssen Ihren Code neu strukturieren. Zum Beispiel: Pause, wenn die Stoppbedingung erreicht ist.

std::vector<int> results; 

for(int i = 0; i < v.size() - 1; ++i) 
{ 
    results.push_back(v[i]); 

    if(v[i] < v[i+1]) 
    { 
    results.push_back(v[i+1]); 
    break; 
    } 
} 
+0

Jedes Mal, wenn eine Schleifenvariable in Beispielen wie dieser aus einer Schleife extrahiert werden muss, verstehe ich noch einmal, warum python den Schleifenkonstrukten eine 'else'-Klausel hinzugefügt hat. – StoryTeller

+0

Dies bietet keine angemessene Antwort. Was ist der Vektor beginnt mit einem ersten Index niedriger als der zweite? Die Schleife stoppt und wird nicht fortgesetzt. –

+0

@BabraCunningham, hast du das wirklich überprüft, bevor du diese Behauptung gemacht hast? Auch Ihre Problembeschreibung und das Beispiel zeigen nicht, dass es * sollte * – StoryTeller

0
bool decrease = false; 
    for(i = 0; i < v.size() - 1; ++i) 
    { 
     if(V[i] > V[i+1]) { 
      decrease = true; 
      results.push_back(v[i]); 
     } else if(decrease == true) { 
      break; 
     } 

    } 

können Sie ein Flag hinzufügen, wenn die Abnahme Sequenz gestartet darzustellen.