一道腾讯笔试题,考察对STL erase函数的运用

来源:互联网 发布:网络视频下载软件 编辑:程序博客网 时间:2024/06/05 05:57

题目是这样的:有1亿个不同QQ号分别保存在vector和set中,去掉其中的奇数QQ号。

在STL中erase函数是这样定义的:

void container::erase(iteraor pos)

iteratot container::erase(iterator pos)

  • 将迭代器pos位置所指的元素移除。
  • 序列式容器(vector、deque、list和string)采用第二种形式,返回后继元素的位置或者end()。
  • 关联式容器(set、multiset、map 和 multimap)采用第一种形式,无返回值。
  • 两者都调用被移除者的析构函数。

因而在使用erase的时候一定格外小心!


对于set:

void erase_odd_nums(set<int> &qqnum){    set<int>::iterator it;    for(it = qqnum.begin(); it != qqnum.end();){        if(*it % 2){            qqnum.erase(it++);        }else{            ++it;        }    }}

对于vector:

void erase_odd_nums(vector<int> &qqnum){    vector<int>::iterator it;    for(it = qqnum.begin(); it != qqnum.end();){        if(*it % 2){            it = qqnum.erase(it);        }else{            ++it;        }    }}




0 0
原创粉丝点击