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 verwenden 😞

    habs 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 verwenden 😞

    Hat 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.



  • Caipi schrieb:

    @lord_bk: Trotzdem würde ich den vektor als const-Referenz übergeben...

    Caipi

    jo thx



  • 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
    4007944

    vielleicht mach ich aber auch was anderes falsch



  • Hallo,
    poste doch einfach mal etwas mehr Code.


Anmelden zum Antworten