2011-12-05 18 views
8

Puede un std::vector<char> ser tratado como un array de esta manera:Puede std :: vector ser tratado como un array

std::vector<char> v(10); 
strncpy(&v[0], "hello", 9); // <-- Is this safe? 
+0

Sí, quise escribir std :: vector . Déjame intentar editar mi publicación original. – user1061590

+2

@TokenMacGuy: así no es como funciona 'strncpy' ... –

+0

Sé que la pregunta es bastante simple y directa, pero no debe contar con el título solo para hacer la pregunta y agregar un cuerpo de pregunta real que, bueno, pregunta una pregunta. –

Respuesta

13

Sí, está bien. A partir de C++ 03, se requiere vector para tener un almacenamiento contiguo.

A partir de C++ 11, lo mismo es cierto para std::string, por cierto; y puede decir v.data() como sinónimo de &v[0] (que también es válido cuando v está vacío).

+0

Su mención de * A partir de C++ 03 .. * me da una duda acerca de cómo está en C++ 11, así que para confirmar AFAIK, 'std :: Vector' todavía es necesario tener almacenamiento contiguo incluso en C++ 11, ¿Es eso correcto? –

+0

@Als Sí, eso no ha cambiado en C++ 11. – bames53

+0

Sí. El nuevo estándar no cambia los requisitos de almacenamiento de 'vector'. En inglés, "a partir de" significa más o menos lo mismo que "desde", pero implica un cronograma más reciente para el evento. :) –

Cuestiones relacionadas