用algorithm中的remove算法删除容器中的元素,并不会改变容器的元素数量,只是会用remove后面的元素覆盖remove地方的元素
list<int> coll1;
for(int i = 1;i<=6;++i)
{
coll1.push_back(i);
coll1.push_front(i);
}
cout<<"prc:";
copy(coll1.begin(),coll1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
remove(coll1.begin(),coll1.end(),3);
cout<<"post:";
copy(coll1.begin(),coll1.end(),ostream_iterator<int>(cout," "));
cout<<endl;
输出:
prc:6 5 4 3 2 1 1 2 3 4 5 6
post:6 5 4 2 1 1 2 4 5 6 5 6
remove会返回一个新的终点,可以利用该终点获得新区间,缩减后容器的大小,或是获得被删除元素的个数。
如果需要以单一语句删除元素,可以这样:
coll1.erase(remove(coll1.begin(),coll1.end(),3),coll1.end());
list的成员函数remove可以直接删除元素(list是链表结构)
coll1.remove(2); copy(coll1.begin(),coll1.end(),ostream_iterator<int>(cout," ")); cout<<endl;
输出:6 5 4 1 1 4 5 6