Comme le Commodore Jaeger y a fait allusion, je ne pense pas que les autres réponses répondent réellement à cette question ; la question demande comment répéter une chaîne, pas un caractère.
Bien que la réponse donnée par Commodore soit correcte, elle est assez inefficace. Voici une implémentation plus rapide, l'idée est de minimiser les opérations de copie et les allocations de mémoire en faisant d'abord croître la chaîne de manière exponentielle :
#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;
}
Nous pouvons également définir un operator*
pour obtenir quelque chose de plus proche de la version Python :
#include <utility>
std::string operator*(std::string str, std::size_t n)
{
return repeat(std::move(str), n);
}
Sur ma machine, cela est environ 10 fois plus rapide que l'implémentation donnée par Commodore, et environ 2 fois plus rapide qu'une implémentation naïve. "ajouter n - 1 fois solution.