vector -> array konvertieren
-
wie konvertiert man am leichtesten einen vector in ein array? irgendwie will das überhaupt nicht ...
ich häts so versucht:
typedef int TValue; typedef vector <TValue> TVec; ... int * CTools::convertVectorToArray(TVec v) { int const size = v.size(); int arr [size]; for (TSize i = 0; i < size; ++i) { arr[i] = v[i]; } return arr; }
geht aber nicht weil: "error C2057: expected constant expression" bei der größe des arrays
-
Ja klar, die größe v ist ja Variabel, die kennt der Compiler zur "Komplimation" (<- wie schreibt man das) nicht. Wenn, geht das nur mit new[] und delete[]
int* CTools::convertVectorToArray(TVec v) { int* parr =new int[v.size()]; for (TSize i = 0; i < v.size(); ++i) { arr[i] = v[i]; } return arr; }
Das ist natürlich eigentlich nicht so gut, da du in der Funktion ein Objekt per new[] erstellst. D.H, du musst immer schön darauf achten, dass du den Rüchgabewert schön mit delte[] löschst... Naja, ich weiß net, ich würde auto_ptr nehmen...
-
Naja, ich weiß net, ich würde auto_ptr nehmen...
Das solltest du lieber nicht. Wenn du ein dynamisches Array durch einen auto_ptr zerstören lässt produziert das undefiniertes Verhalten (auto_ptr ruft delete nicht delete [] auf).
wie konvertiert man am leichtesten einen vector in ein array?
Warum willst du das denn tun?
Reicht es nicht wenn du den vector einfach als Array betrachtest?Beispiel:
void legacy_func(int* arr, int size); void cool_new_func(std::vector<int>& v) { // std::vector als Array an Funktion übergeben legacy_func(&v[0], v.size()); }
-
Reicht es nicht wenn du den vector einfach als Array betrachtest?
leider nein, ich würd normal überhaupt kein array verwenden (sondern nur vec) aber leider is es eine MPI anwendung auf mehreren rechnern und die nimmt leider nur arrays als datentypen ...
auf einem einzelnen knoten läuft das ganze mittels vectoren, aber zum versenden der daten muss ich arrays verwendenhabs jetzt so
int * CTools::convertVectorToArray(TVec v, TSize & arraySize) { TSize size = v.size(); int * arr = new int [size]; arraySize = size; for (TSize i = 0; i < size; ++i) { arr[i] = v[i]; } return arr; }
damit gewinne ich zwar sicher keinen schönheitspreis aba gehen tut es
-
@lord_bk: Trotzdem würde ich den vektor als const-Referenz übergeben...
Caipi
-
lord_bk schrieb:
Reicht es nicht wenn du den vector einfach als Array betrachtest?
leider nein, ich würd normal überhaupt kein array verwenden (sondern nur vec) aber leider is es eine MPI anwendung auf mehreren rechnern und die nimmt leider nur arrays als datentypen ...
auf einem einzelnen knoten läuft das ganze mittels vectoren, aber zum versenden der daten muss ich arrays verwendenHat dir HumeSikkins nicht gezeigt, wie man einen Vektor an eine Funktion übergibt, die ein Array erwartet? Was willst du mehr? Zeig mal die Funktion, bei der das nicht klappt.
-
-
lord_bk schrieb:
Reicht es nicht wenn du den vector einfach als Array betrachtest?
leider nein, ich würd normal überhaupt kein array verwenden (sondern nur vec) aber leider is es eine MPI anwendung auf mehreren rechnern und die nimmt leider nur arrays als datentypen ...
Und? Das ist doch genau die Situtation die ich in meinem Code-Beispiel gezeigt habe.
void deineFunc() { std::vector<int> v; // ... v befüllen // und senden MPI_send(&v[0], v.size(), MPI_INTEGER, ...); }
-
HumeSikkins schrieb:
Und? Das ist doch genau die Situtation die ich in meinem Code-Beispiel gezeigt habe.
void deineFunc() { std::vector<int> v; // ... v befüllen // und senden MPI_send(&v[0], v.size(), MPI_INTEGER, ...); }
leider kommen auf die art beim MPI_Gatter nicht die richtigen zahlen ...
bei -2, 4, 2, 4, 1 etwa
4007984
4008004
4008004
4007152
4007944vielleicht mach ich aber auch was anderes falsch
-
Hallo,
poste doch einfach mal etwas mehr Code.