Ich sehe das oft:
%Vor%Ich meine, ein Vektor wird wahrscheinlich intern ein Array verwenden, also sehe ich, warum das funktioniert. Ich frage mich nur, ob dies ein definiertes Verhalten ist (wie zB ein Implementor, der eine Implementierung von std :: vector mit ausführen darf) was würde brechen).
Wenn es Konflikte zwischen den Standards gibt, interessiert mich was der C ++ 11 Standard sagt.
Ja, es ist erlaubt, wenn std::vector
nicht leer ist. Wenn vector
leer ist, ruft vec[0]
Undefined Behavior hervor.
std::vector
wird benötigt, um Elemente zusammenhängend zu speichern.
Es gibt auch data(
) Methode, aber es ist nur C ++ 11.
Wichtig:
Dies funktioniert nicht bei std::vector<bool>
(bit-effiziente Spezialisierung). Aber es ist auch kein Container und IMO sollte es veraltet sein.
Das ist in Ordnung. Aber wenn vec
leer ist, ist es undefiniertes Verhalten. Verwenden Sie besser vec.data()
, was auch funktioniert, wenn vec
leer ist.
Ja, es ist in Ordnung, weil die Elemente garantiert zusammenhängend gespeichert werden. Der Standard bestätigt dies:
Die Elemente eines Vektors werden zusammenhängend gespeichert, dh wenn
v
einvector<T, Allocator>
ist, wobeiT
ein anderer Typ alsbool
ist, dann wird die Identität&v[n] == &v[0] + n
für alle0 <= n < v.size()
übernommen.