En el momento de emitir la primera línea,
Artist Title Price Genre Disc Sale Tax Cash
para lograr la "alineación", usted tiene que saber "por adelantado" el ancho de cada columna tendrá que ser (de lo contrario, la alineación es imposible) . Una vez que haga conozca el ancho necesario para cada columna (hay varias maneras posibles de lograr eso dependiendo de dónde provengan sus datos), entonces la función setw
mencionada en la otra respuesta le ayudará, o (más brutalmente ;-) usted podría emitir una cantidad calculada de espacios adicionales (torpe, para estar seguro), etc. No recomiendo las pestañas de todos modos ya que no tiene control real sobre cómo el dispositivo de salida final los renderizará, en general.
Volviendo a la cuestión central, si tiene el valor de cada columna en un vector<T>
de algún tipo, por ejemplo, puede hacer un primer pase de formateo para determinar el ancho máximo de la columna, por ejemplo (asegúrese de tener en cuenta cuenta el ancho del encabezado de la columna, también, por supuesto).
Si sus filas vienen "una por una", y la alineación es crucial, tendrá que almacenar en caché o almacenar las filas tal como vienen (en la memoria si caben, de lo contrario en un archivo de disco que más tarde "rebobinar" y volver a leer desde el principio), teniendo cuidado de mantener actualizado el vector de "anchos máximos de cada columna" a medida que llegan las filas. No se puede generar nada (¡ni siquiera los encabezados!), Si mantener la alineación es crucial, hasta que hayas visto la última fila (a menos que de alguna manera mágicamente tengas conocimiento previo del ancho de las columnas, por supuesto ;-).
Las respuestas a continuación permiten especificar el ancho de una columna. Tenga en cuenta que esto requiere que conozca un límite superior (por ejemplo, la restricción de la base de datos) o que lo calcule de antemano (lo que puede significar analizar toda la estructura antes de comenzar a imprimirla). El segundo, aunque necesario, es más lento, por supuesto :) –