/ / ¿Es la memoria de boost :: container :: string contigua? - c ++, impulso

¿La memoria de boost :: container :: string es contigua? - c ++, impulso

en c ++ 98, la memoria de std :: string (c ++ 11 requiere que sea contiguo) puede que no sea un almacenamiento contiguo, ¿qué pasa con boost :: container :: string? ¿Promete que la memoria es contigua?

Si es contiguo, podría funcionar con la API legada de forma más natural.

boost::container::string str("some data");
old_api(&str[0]);

No necesito copiarlo al vector otra vez

boost::container::string str("some data");
std::vector<char> buffer(str.begin(), str.end());

old_api(&str[0]);

Gracias

Respuestas

3 para la respuesta № 1

Sí, boost::containter::string La memoria es contigua.

Y a menos que utilices algunos asignadores funky con no llanos reference, const_refeference y pointer tipos, cualquier boost::container::basic_string La especialización tiene memoria contigua.

Mira cadena "s data() Método: garantiza tiempo incondicional y constante. data()+i == &operator[](i) para cada i en [0,size()].