注册 登录
编程论坛 C++教室

deque中iterator的使用问题

ringlord 发布于 2013-08-04 14:42, 605 次点击
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

请问是什么原因

4 回复
#2
peach54602013-08-04 18:40
你去看看双向队列的插入操作是怎么用的,谢谢!
#3
rjsp2013-08-05 08:34
doubleDeque.insert(itr+1,555)
这句插入操作之后,可能导致其空间的变化,使之之前获得的迭代器无效。
    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);
    itr=doubleDeque.begin(); // 你得加上这一句,重新获得begin的值
    doubleDeque.insert(itr+1,666);
#4
ringlord2013-08-05 14:49
回复 3楼 rjsp
非常感谢
#5
纯黑色2013-08-05 18:02
程序代码:

#include<iostream>
using namespace std;
#include <deque>
#include <iterator>
#include <ctime>
int main()
{   
    typedef deque<int> n_deque;
    typedef ostream_iterator<int> ostream_itr;
   
    n_deque n_dq;   
    for (int i=0;i<10;i++)
    {
        n_dq.push_front(i);
    }
    n_deque::iterator itr= n_dq.begin();
    n_dq.insert(itr+1,1000);
    n_dq.insert(itr+1,1500);
    copy(n_dq.begin(),n_dq.end(),ostream_itr(cout,"\n"));
    system("pause");
    return 0;
}


我的输出结果是:
9
1000
1500
8
7
6
5
4
3
2
1
0
问题来了:为什么迭代器会自加?我写的是itr+1,而不是++itr啊.
1