Что алгоритм std::copy
делает это скопировать один исходный элемент за другим, и заранее итератор назначения после каждого элемента.
Это предполагает, что
- либо размер контейнера назначения был установлен достаточно большой, чтобы вместить все элементы, которые копируют,
- или вы используете тип итератора, который увеличивает размер контейнера назначения каждый раз, когда вы выполняете задание.
Поэтому, если вы хотите использовать алгоритм std::copy
, существует два пути решения этого:
Изменение размера строки, прежде чем сделать копии:
#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;
}
Используя итератор с обратной вставкой вместо стандартного:
#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;
}
Однако, как указывалось другими, если цель состоит в том, чтобы просто скопировать первые 5 символов в строке во время инициализации, используя соответствующий конструктор явно лучший вариант:
std::string dest(source,source+5);
спасибо, будет согласитесь, когда SO позволяет мне. – user2537688
@ пользователь2537688 добро пожаловать. – billz
Альтернативно: 'std :: string first (name, 5);' –