vector de char es bueno porque la memoria es contigua. Por lo tanto, puede usarlo con muchas API de C, como los conectores de berkley o las API de archivos. Puede hacer lo siguiente, por ejemplo:
std::vector<char> vect;
...
send(sock, &vect[0], vect.size());
y funcionará correctamente.
Puede tratarlo esencialmente como cualquier otro búfer de caracteres dinámicamente asignado. Puede escanear hacia arriba y hacia abajo buscando números mágicos o patrones. Puedes analizarlo parcialmente en su lugar. Para recibir desde un socket, puede cambiar el tamaño muy fácilmente para agregar más datos.
La desventaja es el cambio de tamaño no es terriblemente eficiente (cambiar el tamaño o preasignar con prudencia) y la eliminación de la parte frontal de la matriz también será muy ineficaz. Si necesita, por ejemplo, extraer solo uno o dos caracteres a la vez de la estructura de datos con mucha frecuencia, copiar en una copia antes de este procesamiento puede ser una opción. Esto le cuesta una copia y la memoria deque no es contigua, por lo que no puede simplemente pasar un puntero a una API de C.
En pocas palabras, aprenda sobre las estructuras de datos y sus intercambios antes de sumergirse, sin embargo, el vector de carbonilla es típicamente lo que veo que se usa en la práctica general.
buena respuesta. para la parte de aprendizaje: encontré una buena imagen que muestra el uso de contenedores hace algún tiempo, y la incrustó en esta respuesta: http://stackoverflow.com/questions/366432/extending-stdlist#366710 –