little-smile
Grünschnabel
Hallo Ihr Lieben,
Mein Problem ist folgendes. Ich habe eine Sequenz (gepeichert in einem STL Vektor). Jede Position entspricht einen Eintrag. Ich will nun meine Sequenz in gleich lange Teilstücke teilen (Grams) . Die Start/End - Infos werden dann in pro Gram in GramInfo gespeichern. Dies Grams werden dann wieder in einem Vector von GramInfo, hier GramTable gespeichert! So weit, so gut!
Mein Problem ist nun, wenn ich mir in der Main meine Werte ausgeben lasse, erhalte ich für das erste Gram, genauer für dessen Start-Position einen falschen Wert. Er zeigt folglich auf ein falschen Start. Die Endposition, sowie der errechnete hash sind aber korrekt. Auch für alle folgenden Grams sind die Werte korrekt!
Auch wenn ich den Wert abfrage, bevor ich das insert in addGram mache, bzw. mir den Wert im Kosntruktor für GramInfo ausgeben lasse. Immer ist der Wert korrekt. Nur wenn ich ihn mir dann in der Main ausgeben lasse, komm Müll!
Auch wenn ich folgendes mache, erhalte ich für das erste Gram nur Müll.
Alle folgenden liefern aber immer die korrekten Werte.
Ich hoffe, es kann mir jemand helfen, weil ich weiß leider nicht mehr weiter.
Thx little-smile
Mein Problem ist folgendes. Ich habe eine Sequenz (gepeichert in einem STL Vektor). Jede Position entspricht einen Eintrag. Ich will nun meine Sequenz in gleich lange Teilstücke teilen (Grams) . Die Start/End - Infos werden dann in pro Gram in GramInfo gespeichern. Dies Grams werden dann wieder in einem Vector von GramInfo, hier GramTable gespeichert! So weit, so gut!
Code:
class GramInfo
{
public:
/*Constructor and Destructor*/
GramInfo();
GramInfo( const unsigned int& hash, const pair<vector<int>::const_iterator,vector<int>::const_iterator>& pos);
virtual ~GramInfo();
/*further member functions*/
void setGramStart(const pair<vector<int>::const_iterator,vector<int>::const_iterator>& pos){GramPos = pos;}
void setHashValue(const unsigned int& hash){GramHashValue = hash;}
pair<vector<int>::const_iterator,vector<int>::const_iterator>& getGramPos(){cout << *GramPos.first << endl ; return GramPos;}
const unsigned int& getGramHashValue()const{return GramHashValue;}
public:
unsigned int GramHashValue;
pair<vector<int>::const_iterator,vector<int>::const_iterator> GramPos;
};
class GramTable: public vector<GramInfo>
{
public:
GramTable(){}
virtual ~GramTable(){}
void addGram(const unsigned int& hash, const pair<vector<int>::const_iterator,vector<int>::const_iterator>& pos)
{
push_back( GramInfo(hash, pos ) );
}
};
Mein Problem ist nun, wenn ich mir in der Main meine Werte ausgeben lasse, erhalte ich für das erste Gram, genauer für dessen Start-Position einen falschen Wert. Er zeigt folglich auf ein falschen Start. Die Endposition, sowie der errechnete hash sind aber korrekt. Auch für alle folgenden Grams sind die Werte korrekt!
Auch wenn ich den Wert abfrage, bevor ich das insert in addGram mache, bzw. mir den Wert im Kosntruktor für GramInfo ausgeben lasse. Immer ist der Wert korrekt. Nur wenn ich ihn mir dann in der Main ausgeben lasse, komm Müll!
Code:
GramTable gramTab;
GramTable::iterator gram_it;
for (gram_it = gramTab.begin(); gram_it != gramTab.end(); gram_it++){
pair<vector<int>::const_iterator,vector<int>::const_iterator> pos= (*gram_it).getGramPos();
cout <<" => "<< (*gram_it).getGramHashValue()<< "\t" << *pos.first<< "\t" << *pos.second <<endl ;
}
Auch wenn ich folgendes mache, erhalte ich für das erste Gram nur Müll.
Alle folgenden liefern aber immer die korrekten Werte.
Code:
for(vector<int>::const_iterator g = pos.first; g <= pos.second; g++)
{
cout << *g;
}
Ich hoffe, es kann mir jemand helfen, weil ich weiß leider nicht mehr weiter.
Thx little-smile