Initialisierung eines Vektors vor main () in C ++

7

Ich möchte in der Lage sein, einen Vektor mit der Größe 'SIZE' vor der Hauptdatei zu initialisieren. Normalerweise würde ich

machen %Vor%

Aber das Problem ist, dass ich das erste Element des Vektors auf einen bestimmten Wert und das andere auf einen anderen Wert initialisieren möchte.

Gibt es einen einfachen Weg, dies zu tun?

    
R S 25.04.2009, 11:04
quelle

8 Antworten

6

Hier ist eine alternative Lösung:

%Vor%     
Pasi Savolainen 25.04.2009, 11:32
quelle
20

Versuchen Sie Folgendes:

%Vor%

Siehe auch std::generate (wenn Sie innerhalb einer Funktion initialisieren möchten).

    
dirkgently 25.04.2009 11:09
quelle
9

C ++ 0x erlaubt Initialisierungslisten für Standardcontainer, genau wie Aggregate:

%Vor%

Offensichtlich noch nicht Standard, aber es wird angeblich von GCC 4.4 unterstützt. Ich kann keine Dokumentation dafür in MSVC finden, aber Herb Sutter hat gesagt, dass ihre c ++ 0x Unterstützung dem Komitee voraus ist ...

    
Steve Jessop 26.04.2009 15:28
quelle
9

Oder erstellen Sie einfach eine Funktion und rufen Sie Folgendes auf:

%Vor%

Ein bisschen ineffizient vielleicht, aber das ist jetzt vielleicht egal, und mit C ++ 0x und verschieben wird es sehr schnell sein.

Wenn Sie die Kopie (für C ++ 03 und früher) vermeiden möchten, verwenden Sie einen Smart-Pointer:

%Vor%     
Macke 25.04.2009 11:15
quelle
8

Sie können Boosts kommaseparierte Liste verwenden.

    
Alex B 25.04.2009 11:09
quelle
7

Ein bisschen hackish, aber Sie könnten das tun:

%Vor%     
TrayMan 25.04.2009 11:09
quelle
3

Anstatt eine globale Variable zu verwenden, würde ich vorschlagen, dass es besser ist, eine lokale statische Variable zu verwenden. Da die Initialisierung Ihres Vektors vor der Eingabe von main erfolgt, werden alle dort geworfenen Ausnahmen nicht von main abgefangen. Sagen Sie zum Beispiel, Sie haben einen Typ, der, wenn er konstruiert ist, eine Ausnahme auslösen kann:

%Vor%

Bei der folgenden Initialisierung fängt der Befehl try / catch im Hauptteil von main nicht die Ausnahme ab, die vom Konstruktor ausgelöst wird, und so wird Ihr Programm einfach sofort abstürzen und Sie werden wahrscheinlich nicht einmal in der Lage sein, einen Debugger zu verwenden die Ursache!

%Vor%

Ein alternativer Ansatz, der eine Ausnahme vom Konstruktor abfängt, ist die Verwendung einer lokalen statischen - die mit der von dieser Methode vorgeschlagenen Methode initialisiert wird. Antwort .

%Vor%     
Richard Corden 27.04.2009 08:58
quelle
0

Umschließen Sie es mit einer Klasse:

%Vor%     
Igor Oks 25.04.2009 11:25
quelle

Tags und Links