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 № 1Sí, 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()
].