Что если m_pos
равно people.rbegin()
?Поэтому --m_pos
не является допустимым итератором, и это может быть источником проблемы.
Также возможно, что вы удалили элемент, на который указывает --m_pos
в строке перед:
k_pos = people.erase(k_pos); // erase the element
Другая вещь, которую вы можете улучшить в своем коде, - это установка k_pos
и m_pos
итераторов более эффективным способом.Вместо:
for (int i = 1; i < k; i++)
{
k_pos++;
if (k_pos == people.end()) // if reach the end, go to begin
k_pos = people.begin();
}
Вы можете написать:
#include <iterator>
std::advance(people.begin(), k % people.size());