2011-11-23 44 views
29

Estoy usando una biblioteca que acepta datos como vector de char s. Necesito pasar un string a la biblioteca.Convierte std :: string en std :: vector <char>

Pienso en usar el constructor std::vector que acepta iteradores para llevar a cabo la conversión, pero me pregunto si existe una forma mejor de hacerlo.

/*Note: json_str is of type std::string*/ 
const std::vector<char> charvect(json_str.begin(), json_str.end()); 
+3

¿Tiene curiosidad, o realmente midió y determinó que una parte importante de su programa se usa para copiar cadenas? –

Respuesta

25

No, esa es la manera de hacerlo, inicializando directamente el vector con los datos de la cadena.

Como @ildjarn señala en su comentario, si por alguna razón su memoria intermedia de datos necesita ser terminada en nulo, necesita agregarla explícitamente con charvect.push_back('\0').

También tenga en cuenta que, si desea reutilizar el búfer, use la función de miembro assign que toma los iteradores.

+9

Tenga en cuenta que si los datos deben terminarse en nulo, el nulo de terminación tendrá que ser restituido manualmente. – ildjarn

+6

@ildjarn: Buen punto. Sin embargo, sería extraño que un búfer de datos sea nulo, pero nunca se sabe ... – Xeo

+0

Tenga en cuenta que dado que C++ 11 'std :: string' está obligado a utilizar cadenas terminadas nulas en su búfer interno. Entonces push_back ya no es necesario. – Manu343726

11

Su método de llenar el vector está bien; de hecho, probablemente sea mejor en la mayoría de los casos.

Solo para que sepa, no es la única manera. También puede simplemente copiar el contenido del string en el vector<char>. Esto será más útil cuando tenga un vector ya instanciado, o si desea agregar más datos al final, o en cualquier punto, realmente.

ejemplo, donde s es una std::string y v es un std::vector<char>:

std::copy(s.begin(), s.end(), std::back_inserter(v)); 

Como en el caso del constructor, si necesita un terminador nulo, entonces tendrá que empujar hacia atrás a sí mismo:

v.push_back('\0'); 
Cuestiones relacionadas