问题引入
vector调用erase(),由于vector是采用的random_access_iterator,迭代器可以直接加减来指向元素。
for (int i = 0; i < m; i++)
{
int t;
cin >> t;
trail[i] = p[t-1];
//t索引的顺序是递增的
other.erase(other.begin() - 1 - i);
}
然后我莫名会报错错误,但是迭代器并没有超出范围。
解决方法
for (int i = 0; i < m; i++)
{
int t;
cin >> t;
trail[i] = p[t-1];
//t索引的顺序是递增的
vector<place>::iterator it = other.begin();
advance(it, t - 1 - i);
other.erase(it);
}
采用advance()来进行迭代器移位。
删除的话可以通过迭代器遍历不怕迭代器无效。
思考
不知道为什么会报错,反正迭代器移位就采用advance()移位。