永发信息网

C++中的erase操作

答案:3  悬赏:10  手机版
解决时间 2021-03-22 14:41
  • 提问者网友:皆是孤独
  • 2021-03-22 05:27
C++中的erase操作
最佳答案
  • 五星知识达人网友:动情书生
  • 2021-03-22 06:48
erase()函数的功能是用来删除容器中的元素。
函数原型:
iterator erase(iterator where);
iterator erase(iterator first,iterator last);
basic_string& erase(size_type p0=0,size_type n=np);
删除某个容器里的某个元素:c.erase(T);
链表容器以list为例,执行container.erase(it)。
list::iterator it;
for (it = lt.begin(); it != lt.end(); ) {
if (*it % 2 == 0)
lt.erase(it++);
else
++it;
}
全部回答
  • 1楼网友:轻熟杀无赦
  • 2021-03-22 08:07
if(isupper(*iter)){
iter = s.erase(iter);
--iter;
}
问题在这里 iter = s.erase(iter);
注意std::string 实际上里面是个动态 char[]
迭代器内部的内容实际是个char*
那么当erase后 数组长度发生变化
根据动态数组的概念 是不是会发生
char* new_p = new char[new_length];
memcpy(new_p, old_p, new_length);
那么原来的指针还能用吗??
所以你这个功能应该使用 std::remove_if
同样的 vector也不能使用这样的操作
但是类似操作 list就可以。追问谢谢,可惜只能采纳一个满意答案,我就按顺序了。你的回答很详细、很专业
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯