关于C++ std list remove()的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C++ std list remove()的问题相关的知识,希望对你有一定的参考价值。

你好,关于C++ std list remove()函数的一个问题向您请教,请大侠不吝指教,谢谢!

#include<iostream>
#include<string>
#include<algorithm>
#include<list>
using namespace std;
class M_BOX

public:
string m_name;
string m_num;
M_BOX(string &i_name,string &i_num)m_name=i_name;m_num=i_num;
;
M_BOX setData()

string s_name;
string s_num;
cout<<"name: >>";
cin>>s_name;
cout<<"num : >>";
cin>>s_num;
cout<<"data updated!"<<endl<<endl;
return M_BOX(s_name,s_num);

void disPlay(list<M_BOX>& m_box_list)

list<M_BOX>::const_iterator i;
for(i=m_box_list.begin();i!=m_box_list.end();++i)

cout<<"name="<<i->m_name;cout<<"\t\tnum ="<<i->m_num<<endl<<endl;



int main()

list <M_BOX> m_box_list;
m_box_list.push_back(setData());
disPlay(m_box_list);
m_box_list.push_back(setData());
disPlay(m_box_list);
m_box_list.push_back(setData());
disPlay(m_box_list);
cout<<"there is/are "<<m_box_list.size()<<" element(s).\n";
string s;
cout<<"remove an element."<<endl;
cin>>s;
cout<<"after remove()..."<<endl;
m_box_list.remove(M_BOX(s,"")); //<<<<<<--------------------------------------为何这里无法通过编译呢???
disPlay(m_box_list);
cout<<"there is/are "<<m_box_list.size()<<" element(s).\n";

return 0;

M_BOX应该有重载==操作符吧。
list.remove的时候,需要查找List中是否有相同的M_BOX,所以应该补上==操作符函数。
参考技术A m_box_list.remove(M_BOX(s,""));改为m_box_list.remove(M_BOX(s,string("")))const char*是无法转换为string&的,;

或者把M_BOX的构造函数改为M_BOX(string &i_name,string i_num)m_name=i_name;m_num=i_num;

以上是关于关于C++ std list remove()的问题的主要内容,如果未能解决你的问题,请参考以下文章

std::list::remove 方法是不是调用每个已删除元素的析构函数?

我应该使用 std::remove 从列表中删除元素吗?

从数组 C++ 中删除类

STL 容器中的 const 指针

std::remove 与 vector::erase 和未定义的行为

C++ 类模板类型 std::list