| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 820 人关注过本帖
标题:list<struct> c.erase
只看楼主 加入收藏
sudong0913
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2009-4-15
结帖率:76.92%
收藏
已结贴  问题点数:17 回复次数:6 
list<struct> c.erase
#include<iostream>
#include<list>
#include<string>
using namespace std;
struct students
{
    string name;
    int num;
    string sex;
    int age;
};
////////////////////////////////////
void input(list<students> &s);
void del(list<students> &s);
void show(list<students> s);
////////////////////////////////////
void input(list<students> &s)
{
    int k=1;
    students temp;
    while (0!=k)
    {
        cout<<"姓名:";
        cin>>temp.name;
        cout<<"学号:";
        cin>>temp.num;
        cout<<"性别:";
        cin>>temp.sex;
        cout<<"年龄:";
        cin>>temp.age;
        s.push_back(temp);
        cout<<"继续(1) 结束(0)"<<endl;
        cin>>k;
    }

}
//------------------------------------------------------
void del(list<students> &s, const int age)
{
    list<students>::iterator i=s.begin();
    while (i!= s.end())
    {
        if(age==i->age)
        {
            s.erase(i);
        }
            ++i;
    }
}
//------------------------------------------------------------
void show(list<students> s)
{
    cout<<"姓名\t"<<"学号\t"<<"性别\t"<<"年龄\t"<<endl;
    list<students>::iterator it=s.begin();
    while (s.end()!=it)
    {
        cout<<it->name<<"\t"<<it->num<<"\t"<<it->sex<<"\t"<<it->age<<endl;
        ++it;

    }
}
/////////////////////////////////////////////////////////////
void main()
{
    list<students> data;
    input(data);
    system("cls");
    show(data);
    int a;
    cout<<"输入要删除的年龄"<<endl;
    cin>>a;
    del(data,a);//编译能通过,但到了这里程序崩溃了~~求高手指点~~~
    show(data);
}
搜索更多相关主题的帖子: struct erase list 
2010-09-16 17:47
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
list<students>::iterator del(list<students> &s, const int age)
{
    list<students>::iterator i=s.begin();
    while (i != s.end())
    {
        if(age==i->age)
        {
            return i;
         }
           ++i;
    }
    return 0;
}

    list<students>:: iterator p = del(data,a);//编译能通过,但到了这里程序崩溃了~~求高手指点~~~
    data.erase( p );
2010-09-16 18:32
sudong0913
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2009-4-15
收藏
得分:0 
回复 2楼 寒风中的细雨
为什么不能直接在函数中删除呢?
2010-09-16 18:51
x_wangyue
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:144
注 册:2010-8-30
收藏
得分:0 
你的程序中的erase调用破坏了迭代器,迭代器失效了
2010-09-17 00:36
x_wangyue
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:34
专家分:144
注 册:2010-8-30
收藏
得分:0 
回复 2楼 寒风中的细雨
请教一下假如存在不止一个年龄相同的元素,那你的这个程序不是只删除了第一个吗,返回了第一个年龄相同的迭代器
函数不就停止了吗,剩下的好像没删除嘛!
2010-09-17 00:46
sudong0913
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2009-4-15
收藏
得分:0 
在函数外~~删除一个后~~程序会传一个新的引用到del函数中?

[ 本帖最后由 sudong0913 于 2010-9-17 12:40 编辑 ]
2010-09-17 12:37
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:17 
void del(list<students> &s, const int age)
{
    list<students>::iterator i=s.begin();
    while (i!= s.end())
    {
        if(age==i->age)
        {
            i = s.erase(i);
            --i;
        }
            ++i;
    }
}
2010-09-17 19:14
快速回复:list<struct> c.erase
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022578 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved