Wie kann ich den Wert der Elemente in einem Vektor ändern?

7

Ich habe diesen Code, der Eingaben von einer Datei einliest und in einem Vektor speichert. Bis jetzt habe ich es bekommen, um mir die Summe der Werte innerhalb des Vektors zu geben und den Mittelwert der Werte unter Verwendung der Summe zu geben.

Was ich jetzt tun möchte, ist zu lernen, wie man wieder auf den Vektor zugreift und einen Wert von jedem Element des Vektors subtrahiert und dann wieder ausdruckt. Zum Beispiel, sobald die Summe und der Mittelwert berechnet sind, würde ich gerne jeden Wert im Terminal abzüglich des Mittelwerts drucken können. Irgendwelche Vorschläge / Beispiele?

%Vor%     
UndefinedReference 26.01.2011, 17:25
quelle

7 Antworten

12

Sie können einfach darauf wie ein Array zugreifen, d. h. v[i] = v[i] - some_num;

    
Naveen 26.01.2011, 17:27
quelle
5

Nun, Sie könnten immer eine Transformation über den Vektor ausführen:

%Vor%

Sie könnten auch immer einen Iterator-Adapter entwickeln, der das Ergebnis einer Operation zurückgibt, die auf die Dereferenzierung seines Komponenten-Iterators angewendet wird, wenn dieser dereferenziert wird. Dann könnten Sie einfach den Vektor in den Ausgabestrom kopieren:

%Vor%

Oder Sie könnten eine for-Schleife verwenden ... aber das ist irgendwie langweilig.

    
Crazy Eddie 26.01.2011 17:37
quelle
2

Sie können auf die Werte in einem Vektor zugreifen, wenn Sie auf ein anderes Array zugreifen.

%Vor%     
Nick Banks 26.01.2011 17:27
quelle
1

Verwenden Sie einfach:

%Vor%

Oder sein Äquivalent (und besser lesbar?):

%Vor%     
Pablo Santa Cruz 26.01.2011 17:27
quelle
1

Dein Code funktioniert einwandfrei. Als ich es lief, bekam ich die Ausgabe:

%Vor%

Aber es könnte noch verbessert werden.

Sie durchlaufen den Vektor mithilfe von Indizes. Dies ist nicht der "STL Way" - Sie sollten Iteratoren verwenden, um:

%Vor%

Dies ist aus einer Reihe von Gründen besser, hier und anderswo, aber hier sind zwei Hauptgründe:

  1. Jeder Container enthält das Konzept iterator . Nicht jeder Container bietet einen wahlfreien Zugriff (z. B. indizierten Zugriff).
  2. Sie können Ihren Iterationscode verallgemeinern.

Punkt Nummer 2 zeigt eine weitere Möglichkeit, wie Sie Ihren Code verbessern können. Eine andere Sache über Ihren Code, der nicht sehr STL-ish ist, ist die Verwendung einer handgeschriebenen Schleife. <algorithm> s wurden für diesen Zweck entwickelt, und der beste Code ist der Code, den Sie nie schreiben. Sie können eine Schleife verwenden, um die Summe und den Mittelwert des Vektors zu berechnen, indem Sie einen Akkumulator verwenden:

%Vor%

... und dann:

%Vor%

BEARBEITEN:

Wenn Sie den Vorteil eines C ++ 0x-kompatiblen Compilers haben, kann dies mit std::for_each (in #include <algorithm> ) und a Lambda-Ausdruck :

%Vor%     
John Dibling 26.01.2011 18:09
quelle
1
%Vor%     
Fred Nurk 26.01.2011 18:44
quelle
0

Vielleicht möchten Sie stattdessen einige Algorithmen verwenden:

%Vor%

Sie können die Werte mit std::transform ändern, aber bis wir Lambda-Ausdrücke (C ++ 0x) erhalten, kann es mehr Probleme geben als es wert ist:

%Vor%     
Jerry Coffin 26.01.2011 17:37
quelle

Tags und Links