Konvertieren eines Arrays in einen Vector
-
Hallo zusammen,
ich steh gerade etwas auf dem Schlauch.
Folgende Situation. Ich habe einen Pointer auf ein Array vom Typ long long int (64bit Integer). Dieses Array möchte ich nun in einen Vector<int> überführen. Das löse ich über den Konstruktor des Vectors.
Beim Kompilieren gibt es eine Menge Warnungen bzgl. der Konvertierung von int64 in int.Frage: Wie konvertiere ich richtig? Muss ich den Pointer konvertieren oder konvertiere ich den Wert hinter dem Pointer?
Ich benutze folgenden Code:
void foo(long long int* array[]) { vector<int> test(*array, *array + sizeof *array / sizeof *array[0]) }
Danke und Grüße
PS: Wie markiere ich hier in dem neuen Forum Code Ausschnitte?
-
Ich habe die drei schrägen Apostrophe mal hineineditiert.
Dein Code ist in Ordnung, aber offensichtlich ist der Compiler besorgt, dass du Werte eines größeren Bereichs in einen kleineren überführst. Wieso sind die Werte nicht anfangs vom Typ
int
?
-
Danke fürs Editieren.
Die Werte kommen aus einem Fortran Code. Dort werden Integer mit 64bit verwendet.
-
Hallo,
Dein Code funktioniert so nicht. Du hast keine Größe des Arrays. Das sizeof macht nicht was Du denkst, sondern gibt DIr nur die Größe des Pointers auf ein Element des Arrays zurück. Die Größe des Arrays musst Du der Funktion extra mitgeben
Sobald Du in einer Funktionsdeklartion einen Parameter mit sowas stehen hast:
array[]
wird daraus praktisch*array
, das heißt, Du hast einen Pointer auf das erste Element. Das macht es auch fraglich, warum Du jetzt nochmal einen Pointer auf den Pointer mitgeben musst.Zu Deinem Problem mit den Warnung bei der Konvertierung von int64 zu int. Da fällt mir jetzt auch keine gute Lösung ein. Du kannst das in dem Konstruktor nicht einfach durch einen Cast auf *int lösen, denn dann würde das Eingabe-array falsch interpretiert.
-
@djohn sagte in Konvertieren eines Arrays in einen Vector:
Zu Deinem Problem mit den Warnung bei der Konvertierung von int64 zu int. Da fällt mir jetzt auch keine gute Lösung ein.
std::vector<std::int64_t>
nehmen?
-
Vielen Dank erstmal für die Rückmeldungen. Bezüglich des Konstruktors des Vektors werde ich nochmal schauen, damit ich es zum Laufen bekomme.
Ein Vektor aus int64_t kommt leider nicht in Frage, da die Vektoren sehr groß werden und ich den verwendeten Speicherplatz minimieren muss.
-
@vydesaster sagte in Konvertieren eines Arrays in einen Vector:
Ein Vektor aus int64_t kommt leider nicht in Frage, da die Vektoren sehr groß werden und ich den verwendeten Speicherplatz minimieren muss.
Idee 1: Arbeite mit dem Array weiter. Was spricht dagegen? Ein Array verhält sich schließlich fast genauso wie ein vector.
Bessere Idee 2: Arbeite gleich mit dem vector! Was sprich dagegen? Ein vector kann in jedem Kontext benutzt werden, wo ein Array benutzt wird, und kann noch mehr.