Namespaces
Variants

std::numpunct<CharT>:: grouping, std::numpunct<CharT>:: do_grouping

From cppreference.net
Definido en el encabezado <locale>
public :
std:: string grouping ( ) const ;
(1)
protected :
virtual std:: string do_grouping ( ) const ;
(2)
1) Función miembro pública, llama a la función miembro do_grouping de la clase más derivada.
2) Devuelve una std::string que contiene, en cada elemento char , el número de dígitos en cada grupo de la salida numérica formateada por num_put::put() (y, por lo tanto, basic_ostream::operator<< ).

Esta función retorna una cadena, vec , que se utiliza como un vector de valores enteros. (Por ejemplo, " \003 " especifica grupos de 3 dígitos cada uno, mientras que "3" implica grupos de 51 dígitos cada uno.). Cada elemento vec [ i ] representa el número de dígitos en el i -ésimo grupo de dígitos de la parte entera del número, contando desde la derecha: vec [ 0 ] contiene el número de dígitos en el grupo más a la derecha, vec [ 1 ] - en el segundo grupo desde la derecha, etc. La agrupación indicada por el último carácter, vec [ vec. size ( ) - 1 ] , se reutiliza repetidamente para agrupar todos los dígitos restantes en la (parte izquierda de) el número. Si vec [ i ] es no positivo o igual a CHAR_MAX el tamaño del grupo de dígitos correspondiente es ilimitado.

Valor de retorno

El objeto de tipo std::string que contiene los grupos. Las especializaciones estándar de std::numpunct retornan una cadena vacía, indicando que no hay agrupación. Las agrupaciones típicas (por ejemplo, la configuración regional en_US ) retornan " \003 " .

Ejemplo

#include <iostream>
#include <limits>
#include <locale>
struct space_out : std::numpunct<char>
{
    char do_thousands_sep()   const { return ' ';  } // separar con espacios
    std::string do_grouping() const { return "\1"; } // grupos de 1 dígito
};
struct g123 : std::numpunct<char>
{
    std::string do_grouping() const { return "\1\2\3"; }
};
int main()
{
    std::cout << "Locale predeterminado: " << 12345678 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout << "Locale con numpunct modificado: " << 12345678 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new g123));
    std::cout << "Locale con agrupación \\1\\2\\3: "
              << std::numeric_limits<unsigned long long>::max() << '\n'
              << "Lo mismo, para un número de punto flotante: "
              << std::fixed << 123456789.123456789 << '\n';
}

Salida:

Locale predeterminado: 12345678
Locale con numpunct modificado: 1 2 3 4 5 6 7 8
Locale con agrupación \1\2\3: 18,446,744,073,709,551,61,5
Lo mismo, para un número de punto flotante: 123,456,78,9.123457

Véase también

proporciona el carácter a utilizar como separador de miles
(función miembro protegida virtual)