2010-08-14 10 views
11

der C++ Vektor, wie unten angegeben:Benötigen Sie Beispiele für C++ Vektor Nutzung

weight['A'] = 500.98; 
weight['P'] = 455.49; 

Was bedeutet das, und wie man diese Werte verwenden, ist:

vector<double> weight; 
weight.resize(128, 0);  

Gewicht kann verwendet werden? Kann mir jemand ein Beispiel geben?

Antwort

5

Der Code entspricht:

weight[65] = 500.98; 
weight[80] = 455.49; 

Was natürlich nur funktioniert, wenn der Vektor mindestens 81 Elemente enthält.

+0

Dank habe ich es – ladyfafa

+0

korrigiert Es sieht aus wie es 128 so hält man sollte in Ordnung sein. –

1

Sie sollten nicht. Verwenden std::map zu diesem Zweck

Zum Beispiel

std::map<char,double> Weight; 

Weight.insert(std::make_pair('A',500.98)); //include <algorithm> 
Weight.insert(std::make_pair('P',455.49)); 

std::cout<< Weight['A']; //prints 500.98 

Sie können auch über die

std::map<char,double>::iterator

Zum Beispiel mit map iterieren

std::map<char,double>::iterator i = Weight.begin(); 
for(; i != Weight.end(); ++i) 
    std::cout << "Weight[" << i->first << "] : " << i->second << std::endl; 

/*prints 
    Weight['A'] : 500.98 
    Weight['P'] : 455.49 
*/ 
+0

@Prasoon, Okay, ich werde es ändern – ladyfafa

+2

Ein Zeichen ist ein Integer-Typ, so ist ein gültiger Index in ein Array (oder Vektor). Wenn Sie von einem Vektor zu einer Karte wechseln, ändern Sie die Zugriffscharakteristik von O (1) auf O (log (n)) nicht gut. –

+3

@Martin: Ich habe nie gesagt, dass es kein gültiger Index ist. Ich habe nur gesagt, dass er/sie das nicht benutzen sollte, weil das in der Tat verwirrender wäre. Die Verwendung einer 'std :: map' ist sauberer. 'Sie ändern die Zugriffscharakteristiken von O (1) zu O (log (n)) kein guter Kompromiss.Das hätte erhebliche Auswirkungen, wenn n ein sehr großer Wert ist. Für einen kleinen Wert von "n" und die cleaner-Syntax von 'std :: map' würde ich es empfehlen. Dies war überhaupt kein guter Grund für einen Downvote. Sie sollten die Antwort ablehnen, wenn die Antwort vollständig falsch oder irreführend ist. –

7

Zeichenliterale (wie 'A' und ' P ') kann unter Verwendung ihrer ASCII-Werte automatisch in ganze Zahlen umgewandelt werden. So ‚A‘ 65, ‚B‘ ist 66 usw.

So Ihr Code ist das gleiche wie:

weight[65] = 500.98; 
weight[80] = 455.49; 

Der Grund, warum Sie überhaupt wünschen würde, dies zu tun ist, wenn das Gewicht Array etwas mit Charakteren zu tun. Wenn dies der Fall ist, macht das Zuweisen von Gewichtungen zu einem Zeichenliteral den Code lesbarer als das Zuweisen einer Ganzzahl. Aber es ist nur für "Dokumentation", der Compiler sieht es als Integer in beide Richtungen.

+0

Okay, ich sehe, diese Zeichenliterale können in Ints umgewandelt werden – ladyfafa

+0

Zum Zählen der Anzahl von Vorkommen von ASCII-Zeichen (zum Beispiel vor dem Berechnen eines Huffman-Codierbaums) ist es in Ordnung, den Zeichensatz jedoch auf mehr als den unteren ASCII zu ändern würde dieses Schema ungültig machen. –

0

Wenn Sie dies möchten, können Sie eine std::map<char, double> verwenden. Technisch wäre es auch möglich, eine std::vector<double> zu verwenden, aber es würde alle Arten von integralen Umwandlungen von Zeichen in Ganzzahlen geben und das Programm wäre nur verwirrend.

1

So verstehe ich, dass char Literale in Ganzzahlen umgewandelt werden. Unterstützt C++ erweiterte ASCII-Tabelle? Zum Beispiel, wenn ich habe ein

char * blah = 'z'+'z'; 

, was passieren würde ??? z.

'z' = 122 in ASCII 

daher

'z'+'z' = 244 ?? or ?? 
+0

Versuchen Sie :) char * blah = 'z'; wird nicht kompiliert, da Sie ein char ('z') und ein char * (blah) mischen. Wenn Sie char bla verwenden: Es hängt davon ab, ob ein "char" ein "signed char" oder "unsigned char" für Ihren Compiler ist. Für meine, es ist unterzeichnet und über Mathematik Ergebnisse in -12. –

Verwandte Themen