STL 如何遍历list,将每个元素和其后的N个元素进行比较?

TGame 2015-07-29 01:59:49
C++编程人员求解答,
自定义一个结构体 MyStruct,以及由该结构体组成的list
例如:
 MyStruct{
int a;
int b;
}
typedef list<MyStruct> Mylist;

当该list中插入有大量数据后,想进行过滤操作
过滤方式就是比较 a 或者 b的值,
比如:每一个元素a和之后的4个元素比较,a相差在5以内的,
则删除其后4个元素
继续遍历,直到末尾
以上需求要怎么做?小弟只知道怎么遍历
...全文
382 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TGame 2015-07-31
  • 打赏
  • 举报
回复
引用 8 楼 fly_dragon_fly 的回复:
void filter(mylist &li){
    for(auto it=li.begin();it!=li.end();++it){
        auto next =it, first=++next;
        for(int i=0;next!=li.end();++next){
            if(abs(next->a-it->a)>5) break;
            if(++i==4) { li.erase(first,++next); break;}
        }
    }
}
虽然代码有点小问题,不过1.和后面元素的比较,2.删除 这两个需求都解决了,给分 不过不需要用 int i 来计数, 有一个distance(iterFirst, iterLast) 可以算个数,起到计数功能
fly_dragon_fly 2015-07-29
  • 打赏
  • 举报
回复
void filter(mylist &li){
    for(auto it=li.begin();it!=li.end();++it){
        auto next =it, first=++next;
        for(int i=0;next!=li.end();++next){
            if(abs(next->a-it->a)>5) break;
            if(++i==4) { li.erase(first,++next); break;}
        }
    }
}
二班的码农 2015-07-29
  • 打赏
  • 举报
回复
Mylist::iterator itor= mylist.begin(); for(; itor != mylist.end(); ++itor) { MyStruct ms = *itor // 当前的元素/迭代器,如何和之后的N个比较 Mylist::iterator itor_temp = itor; MyStruct ms1 = *(++itor_temp); MyStruct ms2 = *(++itor_temp) ; MyStruct ms3 = *(++itor_temp); MyStruct ms4 = *(++itor_temp); }
TGame 2015-07-29
  • 打赏
  • 举报
回复
引用 5 楼 ant2012 的回复:
用迭代器iterator不就行了,++四回不就是后面第四个元素的位置吗
++四次之后,不是指向了后面第四个元素的位置了吗,起初的位置在哪了呢 起初位置的数据,和++四次之后位置的数据,怎么比较呢 而且如果比较后,满足某条件,还要删除起初位置之后的四个位置的元素, 你贴代码,我才看明白的,一句话说不清
二班的码农 2015-07-29
  • 打赏
  • 举报
回复
用迭代器iterator不就行了,++四回不就是后面第四个元素的位置吗
TGame 2015-07-29
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
后一个元素迭代器:*(itor+1)
只有vectro才能这么用吧,list可以这么用?
TGame 2015-07-29
  • 打赏
  • 举报
回复
或者有什么替代方案,只要能解决这个问题就可以
paschen 版主 2015-07-29
  • 打赏
  • 举报
回复
后一个元素迭代器:*(itor+1)
TGame 2015-07-29
  • 打赏
  • 举报
回复
其实我就是想知道,遍历过程中, 如何将当前元素/迭代器和之后的元素/迭代器进行比较
Mylist::iterator itor= mylist.begin();
for(; itor != mylist.end(); ++itor)
{
    MyStruct ms = *itor   //  当前的元素/迭代器,如何和之后的N个比较
}

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧