顺序容器删除元素出错,求教。
题目如下:
编写程序处理一个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才是变更条件
}