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?
-
Ja genau das suche ich, aber wieso geht das jetzt hier nicht:
Weil
veckein 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.