西安市建设工程信息网平台/福州seo技巧培训

   日期:2024-12-28    作者:tz3v6 移动:http://oml01z.riyuangf.com/mobile/quote/76264.html

STL中,要删除容器内的一个元素,其方法会随着容器类型的不同而不同。

西安市建设工程信息网平台/福州seo技巧培训

 

例如,对于STL容器c,c包含int类型的元素,现在需要删除c中等于2014的元素。

序列容器即具有连续内存的容器,如vector,deque,string,其删除特定值的元素的方法最好是使用erase-remove用法。

对于list,则直接可以调用remove方法。

若c是关联容器,即c是set或者map等类型,则正确方法是使用erase方法。

对于容器c,需要删除使下面判别式为true的每一个元素

对于序列容器,vector,deque,string,list,把每个remove的调用换成调用remove_if就行了

关联容器并没有提供类似remove_if的方法,因此须写一个循环来遍历c中的所有元素,并在遍历过程中删除满足特定条件的元素。 

下面的代码是很多程序员首先能想到的。

 

可是,当关联容器中的一个元素被删除时,指向该元素的所有迭代器都将失效。一旦执行了c.erase(it),it就变成无效的值。

 

为了避免这个问题,我们要确保在调用erase之前,有一个迭代器指向c中的下一个元素。下面的代码演示了这个方法。

 

对于序列容器,如果也要通过遍历循环来删除特定的元素,则不能使用上面的删除关联容器特定元素的方法,因为对vector,string,deque这类序列容器来说,调用erase不仅会使指向被删除元素的迭代器失效,而且也会使被删除元素之后的所有迭代器失效。

下面代码演示了序列容器使用遍历循环来删除元素的方法。

 

值得注意的是,这种 方法仅对序列容器适用。对于关联容器,若erase的参数是迭代器(erase的参数也可以是里面的元素,则返回值是void。所以上面的方法并不适用于关联容器。
 

 

 

参考资料


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号