C++ STL list 中对结构体的remove方法如何使用?
代码如下:程序编译报错,请高手解决!#include<iostream>#include<list>//使用list队列添加的头文件usingnamespacestd;/...
代码如下:程序编译报错,请高手解决!
#include <iostream>
#include <list> //使用list队列添加的头文件
using namespace std; //使用命名空间std
struct student{
char* name; //姓名
int age; //年龄
char* city; //城市
char* tel; //电话
};
int main()
{
student s[] = {
{"Xu",10,"Beijing","88888888"},
{"Zhang",12,"Shanghai","22222222"},
{"He",15,"Guangzhou","11111111"}
};
// 装入链表数据
list<student> l;
l.push_back(s[0]);
l.push_back(s[1]);
l.push_back(s[2]);
student li = {"Li",15,"Guangzhou","11111111"};
//元素头部插入
l.push_front(li); // 头部插入元素Li,15,Guangzhou,11111111
//元素尾部插入
student lend = {"Wang",18,"Wuhan","33333333"};
l.push_back(lend);
// remove的使用,这里不知道该如何填写,例如我要删除:"Wang",18,"Wuhan","33333333这条
//该如何写remvoe方法呢?
// 请高手在这里加上代码
//遍历打印链表
list<student>::iterator i,iend;
iend = l.end();
cout<<"姓名 年龄 城市 电话"<<endl;
cout<<"--------------------------------"<<endl;
for(i=l.begin();i!=iend;i++){
cout<<(*i).name<<" ";
cout<<(*i).age<<" ";
cout<<(*i).city<<" ";
cout<<(*i).tel<<" "<<endl;
}
cout<<"--------------------------------"<<endl;
return 0;
} 展开
#include <iostream>
#include <list> //使用list队列添加的头文件
using namespace std; //使用命名空间std
struct student{
char* name; //姓名
int age; //年龄
char* city; //城市
char* tel; //电话
};
int main()
{
student s[] = {
{"Xu",10,"Beijing","88888888"},
{"Zhang",12,"Shanghai","22222222"},
{"He",15,"Guangzhou","11111111"}
};
// 装入链表数据
list<student> l;
l.push_back(s[0]);
l.push_back(s[1]);
l.push_back(s[2]);
student li = {"Li",15,"Guangzhou","11111111"};
//元素头部插入
l.push_front(li); // 头部插入元素Li,15,Guangzhou,11111111
//元素尾部插入
student lend = {"Wang",18,"Wuhan","33333333"};
l.push_back(lend);
// remove的使用,这里不知道该如何填写,例如我要删除:"Wang",18,"Wuhan","33333333这条
//该如何写remvoe方法呢?
// 请高手在这里加上代码
//遍历打印链表
list<student>::iterator i,iend;
iend = l.end();
cout<<"姓名 年龄 城市 电话"<<endl;
cout<<"--------------------------------"<<endl;
for(i=l.begin();i!=iend;i++){
cout<<(*i).name<<" ";
cout<<(*i).age<<" ";
cout<<(*i).city<<" ";
cout<<(*i).tel<<" "<<endl;
}
cout<<"--------------------------------"<<endl;
return 0;
} 展开
4个回答
展开全部
多了解下STL的算法,看看《C++ Primer》和《Effective C++》系列
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <list> //使用list队列添加的头文件
using namespace std; //使用命名空间std
struct student{
char* name; //姓名
int age; //年龄
char* city; //城市
char* tel; //电话
student(char * name,int age,char * city,char* tel): //构造函数
name(name),age(age),city(city),tel(tel){}
bool operator==(const student&); //用remove要重载==,除非是内置类型
};
bool student::operator==(const student& stu){
if(!strcmp(name,stu.name))//字符串相等判断,不过不如直接用string成员更简单
if(age==stu.age)
if(!strcmp(city,stu.city))
if(!strcmp(tel,stu.tel))
return true;
return false;
}
void print(student stu){
cout<<left<<setw(8)<<stu.name;//格式化输出打印的好看点...
cout<<left<<setw(5)<<stu.age;
cout<<left<<setw(12)<<stu.city;
cout<<left<<setw(10)<<stu.tel<<endl;
}
int main()
{
student s[] = {
student("Xu",10,"Beijing","88888888"),
student("Zhang",12,"Shanghai","22222222"),
student("He",15,"Guangzhou","11111111")
};
list<student> l(s,s+3);//用数组初始化
student li("Li",15,"Guangzhou","11111111");
l.push_front(li);
student lend("Wang",18,"Wuhan","33333333");
l.push_back(lend);
//方法一:调用erase做删除
l.erase(remove(l.begin(),l.end(),student("Wang",18,"Wuhan","33333333")));
//方法二:直接用remove,比方法一更高效
//l.remove(student("Wang",18,"Wuhan","33333333"));
cout<<"姓名 年龄 城市 电话"<<endl;
cout<<"---------------------------------"<<endl;
for_each(l.begin(),l.end(),print);//打印
cout<<"---------------------------------"<<endl;
return 0;
}
展开全部
list中是没有remove的,只有remove_if(condition).;
condition的是一个条件函数,你要自己去实现,remove_if会遍历list,并且使用条件函数condition判定元素是否为true,为ture则删除元素
condition的是一个条件函数,你要自己去实现,remove_if会遍历list,并且使用条件函数condition判定元素是否为true,为ture则删除元素
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C/C++ code
// remove_if example
#include <iostream>
#include <algorithm>
using namespace std;
bool IsOdd (int i) { return ((i%2)==1); }
int main () {
int myints[] = {1,2,3,4,5,6,7,8,9}; // 1 2 3 4 5 6 7 8 9
// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^
pend = remove_if (pbegin, pend, IsOdd); // 2 4 6 8 ? ? ? ? ?
// ^ ^
cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
cout << " " << *p;
cout << endl;
return 0;
}
// remove_if example
#include <iostream>
#include <algorithm>
using namespace std;
bool IsOdd (int i) { return ((i%2)==1); }
int main () {
int myints[] = {1,2,3,4,5,6,7,8,9}; // 1 2 3 4 5 6 7 8 9
// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^
pend = remove_if (pbegin, pend, IsOdd); // 2 4 6 8 ? ? ? ? ?
// ^ ^
cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
cout << " " << *p;
cout << endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询