Qu'est-ce que le std::copy
est de copier un élément source après l'autre, et d'avancer l'itérateur de destination après chaque élément.
Cela suppose que
- soit la taille du conteneur de destination a été définie comme suffisamment grande pour contenir tous les éléments que vous copiez,
- soit vous utilisez un type d'itérateur qui augmente la taille du conteneur de destination chaque fois que vous lui faites une affectation.
Par conséquent, si vous voulez utiliser le std::copy
algorithme, il y a deux façons de résoudre ce problème :
-
Redimensionnez la chaîne avant de faire les copies :
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
char source[] = "hello world";
std::string dest;
dest.resize(5);
std::copy(source,source+5,begin(dest));
std::cout << dest << std::endl;
return 0;
}
-
Utilisation d'un itérateur d'insertion arrière au lieu de l'itérateur standard :
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
int main()
{
char source[] = "hello world";
std::string dest;
std::copy(source,source+5,std::back_inserter(dest));
std::cout << dest << std::endl;
return 0;
}
Cependant, comme l'ont souligné d'autres personnes, si le but est simplement de copier les 5 premiers caractères dans la chaîne au moment de l'initialisation, l'utilisation du constructeur approprié est clairement la meilleure option :
std::string dest(source,source+5);