首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

顺序容器删除元素出错,求教。该如何处理

2012-04-18 
顺序容器删除元素出错,求教。题目如下:编写程序处理一个string类型的list容器。在该容器中寻找一个特殊值,如

顺序容器删除元素出错,求教。
题目如下:
  编写程序处理一个string类型的list容器。在该容器中寻找一个特殊值,如果找到,则将它删除。

代码如下:

C/C++ code
int main(){    string word;    list<string> slst;    cout << "请输入字符串:" << endl;    //为list读入字符串    while(cin >> word)        slst.push_back(word);    cin.clear();    //定义一个特殊字符串,并提示输入    cout << "请输入一个特殊字符串:" << endl;    string hate_str;    cin >> hate_str;        //在list中寻找、删除特殊字符串    for(list<string>::iterator iter = slst.begin(); iter != slst.end(); ++iter)    {        if(*iter == hate_str)        {            iter = slst.erase(iter);        //删除元素并更新迭代器            --iter;        //使迭代器指向被删除元素的前一元素        }    }        return 0;}


调试的时候就会出错,应该是“--iter”这里的问题。我是跟着书上做的,一模一样,想问问各位这是怎么回事。烦劳大家详细指点指点,谢谢。

[解决办法]
iter = slst.erase(iter); //删除元素并更新迭代器
--iter; //使迭代器指向被删除元素的前一元素
删除红色一句.

[解决办法]
--iter; 注释掉这句即可。这句很容易一起问题。比如你删除的第一个元素,那么iter指向了第2个元素(现在变成了第一个)那么--iter应该指向那个元素呢?
[解决办法]
其实逻辑应该是这样的:
if(*iter == hate_str)
{
iter = slst.erase(iter);
}
else
{
++iter; // for里的应该放到这里,*iter == hate_str才是变更条件
}

热点排行