C/C++ enqueue dequeue 指针老是越界,求助

#include<iostream>
#include<string>
#include<stdio.h>
#include<vector>
using namespace std;
int main()
{
int n,num;
int sum=0;
string s;
string tmp;
string in;
string out;
vector<string> member;
vector<string>::iterator it=member.begin();
scanf("%d",&n);
getchar();
while(n--)
{
getline(cin,s);
tmp=s.substr(0,7);
if(tmp=="enqueue")
{
sum++;
num=s.size();
in=s.substr(9,num-7);
member.push_back(in);
}
else if(tmp=="dequeue")
{
if(sum==0)
printf("-1\n");
else
{
cout<<*it;
if(it!=member.end())
{
it++;
sum--;
}
else
{
sum--;
}
}
}
}
return 0;
}

调试了一下,在cout<<*it地方出现错误。请大家帮忙改改,谢谢!
http://acm.cs.ecnu.edu.cn/problem.php?problemid=1801
这是题目的地址。

第1个回答  2012-08-08
vector<string> member;
vector<string>::iterator it=member.begin(); 不能在这里给it赋值, 因为当vector::push_back()后, 迭代器很可能失效的。追问

那应该怎么改~~~~~

追答

在使用it之前最近的地方赋值

第2个回答  2012-08-08
你在vector尚未添加数据时,就 it=member.begin(),这时得到的是 memeber.end(),换句话说是空的数据,当然不能 *it
你只要在把 it = member.begin() 放在 cout<< *it前一句就可以了。本回答被提问者采纳
相似回答