From standard
23.3.6.1 Class template vector overview
The elements of a
vector are stored contiguously, meaning that if v is a vector where T is some type other
than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size()
so &v[0]
indeed points to the beginning of 10 continuous Data
objects.
but for the layout of Data
we have
9.2.13 Class members
Nonstatic data members of a (non-union) class with the same access control (Clause 11) are allocated so
that later members have higher addresses within a class object. The order of allocation of non-static data
members with different access control is unspecified (11). Implementation alignment requirements might
cause two adjacent members not to be allocated immediately after each other; so might requirements for
space for managing virtual functions (10.3) and virtual base classes (10.1).
so we cannot be sure that sizeof(Data) == 3*sizeof(float)
, therefore general answer should be: it's not save to assume 30 continuous floats.