Ich habe eine Klasse (foo), die einen Vektor enthält.C++: Das erste Element des Vektors "korrumpieren"
Wenn ich wie so in den Vektor über die Elemente versuchen Iterieren:
for(vector<random>::iterator it = foo.getVector().begin();
it != foo.getVector().end(); ++it) {
cout << (*it) << endl;
}
Das erste Element ist immer beschädigt und gibt Datenmüll.
Wenn jedoch, wie etwas zu tun:
vector<random> v = foo.getVector();
for(vector<random>::iterator it = v.begin();
it != v.end(); ++it) {
cout << (*it) << endl;
}
Alles scheint zu funktionieren. Gibt es ein "Gotcha", von dem ich nichts weiß?
Ich habe auch versucht, Cout zu tun < < foo.getVector() [0] < < endl; außerhalb der Schleife, aber das scheint in Ordnung zu sein.
Danke.
Edit:
Hier ist meine Header-Datei:
#ifndef HITS
#define HITS
#include <vector>
#include "wrappers.h"
class Hits {
public:
Hits();
std::vector<word_idx_value> getVector() {return speech_hits;}
const std::vector<word_idx_value> getVector() const {return speech_hits;}
void add(const word_idx_value&);
Hits &operator+=(const Hits&);
private:
std::vector<word_idx_value> speech_hits;
};
#endif
Können wir Ihre Mitgliedsfunktion getVector() sehen? Vielleicht verändert es da etwas? – rlbond
Was gibt return getVector() zurück? Ist es eine Kopie eines Vektors oder ein Verweis auf einen vorhandenen Vektor, der irgendwo anders gespeichert ist? – Wacek
Ich habe es geändert, um durch Referenz und nicht nach Wert zurückzukehren. Es scheint in Ordnung zu sein, aber warum würde der Wert so sehr auf das Ergebnis wirken? –