Я попытался написать функцию, которая получает список и индекс и возвращает итератор в список, который начинается с этого индекса.
Функция:
template<class T>
typename std::list<T>::iterator begin_it_at_index(list<T> list_to_iterate_on, const int index)
{
return next(list_to_iterate_on.begin(), index);
}
Когда я вызвал функцию для получения итератора, я получил первый элемент, который хотел, с правильным индексом, но когда я сделал «++» на итераторе, он просто выскочил из списка вместо того, чтобы перейти к следующему элементу.
Код:
list<int> temp = {10,20,50,100};
for (auto it = begin_it_at_index(temp, 1); it != temp.end(); ++it)
{
cout << *it << endl;
}
Выход:
20
74211408
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Что я делаю неправильно?





Вам нужно передать контейнер по ссылке begin_it_at_index. В противном случае берется копия значения, а возвращаемый итератор становится недействительным, поскольку локальный list_to_iterate_on в функции выходит за пределы области видимости.
То есть,
template<class T>
typename std::list<T>::iterator begin_it_at_index(
list<T>& list_to_iterate_on,
const int index
)
это исправление.
Спасибо, Вирсавия, исправление сработало.