Hola; me cuelo en la discusión con una cita de Herb Sutter (en C++ Coding Standards 101 Rules Guidelines and Best Practices):
"
Why juggle Ming vases? Avoid implementing array abstractions with C-style arrays, pointer arithmetic, and memory management primitives"
Sus argumentos a favor de vectores y strings se refieren al manejo automático de memoria, facilidades de la interfaz, compatibilidad con el modelo de memoria del C, chequeo de errores para debug, no representan demasiado gasto en eficiencia, incentivan las oportunidades de optimización (en la implementación de la stl). Y por supuesto, considera aceptable el uso de arrays de estilo C cuando las dimensiones son fijas y conocidas en tiempo de compilación.
Desde el C++11 existe el std::array (antes boost::array), que es un wrapper de array de estilo C, de tamaño constante:
http://en.cppreference.com/w/cpp/container/array