如何从具有用户定义数据类型的列表中删除元素? [英] How to remove an element from list having user defined data type?
问题描述
大家好,
我试图从为用户定义的数据类型创建的C ++列表中删除一个元素.由于模板未知用户定义类型上的==运算符,因此会引发错误.我该如何克服这个问题?
Hi all,
I am trying to remove an element from C++ list created for user defined data type. It is throwing error since == operator on a user defined type is unknown to template. How do I overcome this problem?
#include <iostream>
#include <list>
using namespace std;
struct mem_list
{
unsigned int addr;
int size;
};
int main()
{
list<mem_list> Mem_numbers;
mem_list mem;
mem_list *ptr_mem;
mem.addr = 0xFF;
mem.size = 10;
Mem_numbers.push_front(mem);
mem.addr = 0xAA;
mem.size = 20;
Mem_numbers.push_front(mem);
mem.addr = 0xBB;
mem.size = 30;
Mem_numbers.push_front(mem);
mem.addr = 0xCC;
mem.size = 40;
Mem_numbers.push_front(mem);
mem.addr = 0xDD;
mem.size = 50;
Mem_numbers.push_front(mem);
int counter = 0;
for(list<mem_list>::const_iterator it = Mem_numbers.begin(); it != Mem_numbers.end(); ++it)
{
mem = *it;
cout << mem.size<< " ";
}
cout << endl;
for(list<mem_list>::const_iterator it = Mem_numbers.begin(); it != Mem_numbers.end(); ++it)
{
mem = *it;
if( mem.size == 30)
{
Mem_numbers.remove(mem);
}
}
for(list<mem_list>::const_iterator it = Mem_numbers.begin(); it != Mem_numbers.end(); ++it)
{
mem = *it;
cout << mem.size<< " ";
}
cout << endl;
return 0;
}
推荐答案
函数
std::list<t>::remove(const T&)</t>
在列表中搜索等于要传递的值的元素.为了测试相等性,它调用运算符
searches the list for an element that is equal to the value being passed. To test equality, it invokes the operator
bool operator==(const T& v1, const T& v2)
或替代地,运算符
bool T::operator==(const T& v) const
对于诸如int
之类的内置类型,隐式定义了第一类运算符.但是对于用户定义的类型则不是.因此,您必须自己定义此运算符的两种形式之一:
For built-in types such as int
, the first type of operator is implicitely defined. For user-defined types however it is not. Therefore you must define one of the two forms of this operator yourself:
bool operator==(const mem_list& v1, const mem_list& v2) {
return v1.addr==v2.addr && v1.size==v2.size;
}
// or:
struct mem_list {
unsigned int addr;
int size;
bool operator==(const struct mem_size& v) const {
return v.size==size && v.addr==addr;
}
};(
std::list
元素必须必须具有等价性.将operator == ()
添加到您的struct mem_list
中,例如:
Hi,
std::list
elements must be equality comparable. Add anoperator == ()
to yourstruct mem_list
like:
struct mem_list
{
bool operator == (const mem_list& other)
{
return (addr == other.addr) && (size == other.size);
}
unsigned int addr;
int size;
};
欢呼声,
AR
编辑(希望)正确答案
cheers,
AR
Edited for (hopefully) correct answer
这篇关于如何从具有用户定义数据类型的列表中删除元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!