Qu'est-ce que l'algorithme std::copy
est une copie de l'un élément source après l'autre, et faire avancer le iterator de destination après chaque élément.
Cela suppose que
- soit la taille du conteneur de destination a été mis en assez grand pour tous les éléments que vous copiez,
- ou que vous utilisez un type iterator qui augmente la taille du conteneur de destination chaque fois que vous faites une cession.
Par conséquent, si vous voulez utiliser l'algorithme std::copy
, il y a deux façons de résoudre ce:
Redimensionner 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 retour-insérer l'itérateur 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'a fait par d'autres, si le but est tout simplement de copier les 5 premiers caractères dans la chaîne au moment de l'initialisation, en utilisant le constructeur approprié est clairement la meilleure option:
std::string dest(source,source+5);
grâce, sera accepter quand SO me le permet. – user2537688
@ user2537688 vous êtes les bienvenus. – billz
Alternativement: 'std :: string first (nom, 5);' –