deque中iterator的使用有关问题
deque中iterator的使用问题
Lliang的C++里面的例子
在使用deque的迭代器时,
double values[] = {1, 2, 3, 4, 5, 6, 7};
deque<double> doubleDeque(values, values + 7);
deque<double>::iterator itr=doubleDeque.begin(); doubleDeque.insert(itr+1,555); doubleDeque.insert(itr+1,666);出异常,
Debug assertion failed
请问是什么原因
------解决方案--------------------
------解决方案--------------------
doubleDeque.insert(itr+1,555);执行完了之后原来的迭代器就失效了。用失效的迭代器进行插入肯定会出问题了。
可以改成
it = doubleDeque.insert(itr+1,555);
doubleDeque.insert(itr+1,666)
------解决方案--------------------
doubleDeque.insert(itr+1,555);的意思是在位置itr+1出,插入555,也就是,下标[1]出位置,但是当插入完后整个表达式返回的是新元素的位置,但是itr值就是非法的了,所以必须重新赋值,解释如下:

------解决方案--------------------
我刚才仔细跟踪了一下发现,用insert()插入时,返回新的元素的位置总是当前的前一个,比如,当前插入的位置是[1],则返回[0]位置,而在插入[1]位置时,所有原来元素[1],[2].....都后移一位。若当前插入位为[0],这仍然返回[0].
Lliang的C++里面的例子
在使用deque的迭代器时,
double values[] = {1, 2, 3, 4, 5, 6, 7};
deque<double> doubleDeque(values, values + 7);
deque<double>::iterator itr=doubleDeque.begin(); doubleDeque.insert(itr+1,555); doubleDeque.insert(itr+1,666);出异常,
Debug assertion failed
请问是什么原因
------解决方案--------------------
插入数据的时候 一般情况下会破坏容器的迭代器的,
你又通过迭代器来插入,会不会这里有问题
------解决方案--------------------
doubleDeque.insert(itr+1,555);执行完了之后原来的迭代器就失效了。用失效的迭代器进行插入肯定会出问题了。
可以改成
it = doubleDeque.insert(itr+1,555);
doubleDeque.insert(itr+1,666)
------解决方案--------------------
doubleDeque.insert(itr+1,555);的意思是在位置itr+1出,插入555,也就是,下标[1]出位置,但是当插入完后整个表达式返回的是新元素的位置,但是itr值就是非法的了,所以必须重新赋值,解释如下:
------解决方案--------------------
我刚才仔细跟踪了一下发现,用insert()插入时,返回新的元素的位置总是当前的前一个,比如,当前插入的位置是[1],则返回[0]位置,而在插入[1]位置时,所有原来元素[1],[2].....都后移一位。若当前插入位为[0],这仍然返回[0].