Como aludió el comodoro Jaeger, no creo que ninguna de las otras respuestas realmente responda esta pregunta; la pregunta pregunta cómo repetir una cadena, no un carácter.
Si bien la respuesta dada por Commodore es correcta, es bastante ineficiente. Aquí hay una implementación más rápida, la idea es minimizar las operaciones de copia y las asignaciones de memoria haciendo crecer primero la cadena exponencialmente:
#include <string>
#include <cstddef>
std::string repeat(std::string str, const std::size_t n)
{
if (n == 0) {
str.clear();
str.shrink_to_fit();
return str;
} else if (n == 1 || str.empty()) {
return str;
}
const auto period = str.size();
if (period == 1) {
str.append(n - 1, str.front());
return str;
}
str.reserve(period * n);
std::size_t m {2};
for (; m < n; m *= 2) str += str;
str.append(str.c_str(), (n - (m / 2)) * period);
return str;
}
También podemos definir un operator*para acercarnos a la versión de Python:
#include <utility>
std::string operator*(std::string str, std::size_t n)
{
return repeat(std::move(str), n);
}
En mi máquina, esto es aproximadamente 10 veces más rápido que la implementación dada por Commodore, y aproximadamente 2 veces más rápido que una solución ingenua de 'agregar n - 1 veces' .