В вашей ситуации вы можете просто сделать:
std::string result(itr1, itr1 + 1);
Поскольку std::string
имеет конструктор , для копирования которого требуется два итератора.
Теперь для объяснений:
std::copy(itr1, itr2, res)
копирует все элементы, начиная с itr1
и заканчивая непосредственно перед itr2
a местоположением, указанным res
.
То есть, если itr1 == itr2
между двумя итераторами нет "пробела" и ничего не копируется.
Именно поэтому итератор end()
обычно указывает за последним элементом коллекции.
Рассмотрим следующий вектор, vec
, который имеет 3 элемента:
1, 2, 3, X
^ ^
| |
| \-- end() (X indicates a slot past the last element)
\----------- begin()
То есть, если вы используете std::copy()
с begin()
и end()
, вы фактически скопируете все элементы vec
.