Typ eines vectors abfragen



  • Hi,

    in meinem Program arbeite ich nur mit vectoren aber an enigen Stellen muss ich mit einer externen API arbeiten, das sieht dann so aus:

    std::vector<int>vec;
    allocate(....,vec.size()*sizeof(int),...);
    

    Wenn ich jetzt den Vector von int zu double andere muss ich auch immer den sizeof parameter aendern:

    std::vector<double>vec;
    allocate(....,vec.size()*sizeof(double),...);
    

    Gib es einen Mechanismus um das automatisch zu machen, also den Typ eies Vectors erfragen?

    🙂



  • Was heisst hier abfragen? So wie du es beschreibst sieht es aus als wäre der Typ des Vektors at compile time bekannt.

    typedef	std::vector<int> intVec;
    typedef	std::vector<double> doubleVec;
    typedef doubleVec myVec;
    std::cout << sizeof(myVec::value_type) << std::endl;
    

    Oder was genau suchst du?



  • sizeof(*vec.data())

    ~Edit: Frage gelöscht. sizeof() passiert ja zu compile-time. Dann sollte auch sizeof(vec[0]) OK sein.~



  • Dobi schrieb:

    Was heisst hier abfragen? So wie du es beschreibst sieht es aus als wäre der Typ des Vektors at compile time bekannt.

    typedef	std::vector<int> intVec;
    typedef	std::vector<double> doubleVec;
    typedef doubleVec myVec;
    std::cout << sizeof(myVec::value_type) << std::endl;
    

    Oder was genau suchst du?

    Ja genau das suche ich, aber wieso geht das jetzt hier nicht:

    #include <vector>
    
    int main()
    {
       std::vector<int>vec;
       vec::value_type;
    
       return 0;
    }
    


  • Caligulaminus schrieb:

    sizeof(*vec.data())

    ~Edit: Frage gelöscht. sizeof() passiert ja zu compile-time. Dann sollte auch sizeof(vec[0]) OK sein.~

    Echt das darf man machen?


  • Mod

    Ja genau das suche ich, aber wieso geht das jetzt hier nicht:

    Weil vec kein Typ ist, sondern ein Objekt. Stattdessen (mit C++11):

    decltype(vec)::value_type;
    

    PunktPubkt schrieb:

    Echt das darf man machen?

    Ja.



  • Du kannst übrigens auch einfach
    vec.data() verwenden oder &vec[0]
    wenn du ein array aus dem vector machen willst. dazu musst du nicht umkopieren.


Anmelden zum Antworten