c++中vector和string的erase用法区别
vector中的erase的参数是迭代器,可以从vector中删除某个位置的元素,或者是范围内的元素:
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
两个参数时,满足左闭右开,即删除的元素中不包括last对应的元素。
而sring的erase方法有三种形式:
basic_string & erase(size_type pos=0, size_type n=npos);
iterator erase(const_iterator position)
iterator erase(const_iterator first, const_iterator last)
与vector不同的是,还支持整型参数,pos为删除的首个位置,n为删除的字符串长度。
而vector是不支持整型参数的。
注意用迭代器作为参数时,所返回的迭代器是删除的最后一个元素的下个位置的迭代器:
因此逐个删除vector内的元素时,应该:
for(vector<int>::iterator it=v.begin();it!=v.end();){
v.erase(it);
}
即不应该再让it++,否则删除过程变成隔一个删一个事小,迭代到最后出现野指针事大。string的erase用迭代器作为参数时也是一样的。