Ваш код ломается, потому что ни в списке, ни в векторе недостаточно элементов. Обратите внимание, что выходной итератор не добавляет элементов, он просто записывает в существующие элементы.
Таким образом, вы можете переписать его следующим образом:
template<typename Container>
void insertValues(Container &result)
{
for (int i = 0; i < 10; i++)
{
result.push_back(i);
}
}
и в main
:
insertValues(values_list);
insertValues(values_vector);
В качестве альтернативы, вы можете использовать итератор, который выполняет операцию push_back
. Это находится в стандартной библиотеке под именем back_inserter
(#include <iterator>
). Используя это, и не изменяя ваш insertValues
код:
insertValues(back_inserter(values_list));
insertValues(back_inserter(values_vector));