我有一个struct
类型的列表,我想从该列表中删除特定记录。做这个的最好方式是什么?我无法弄清楚如何使用.remove
struct dat
{
string s;
int cnt;
};
void StructList()
{
list<dat>::iterator itr; //-- create an iterator of type dat
dat data1; //-- create a dat object
list<dat> dList; //-- create a list of type dat
itr = dList.begin(); //-- set the dList itereator to the begining of dList
string temp; //-- temp string var for whatever
data1.s = "Hello"; //-- set the string in the struct dat to "Hello"
data1.cnt = 1; //-- set the int in the struct dat to 1
dList.push_back(data1); //-- push the current data1 struct onto the dList
data1.s = "Ted"; //-- set the string in the struct dat to "Ted"
data1.cnt = 2; //-- set the int in the struct dat to 2
dList.push_back(data1); //-- push the current data1 struct onto the dList
cout << "Enter Names to be pushed onto the list\n";
for(int i = 0; i < 5; i++)
{
cout << "Enter Name ";
getline(cin,data1.s); //-- This will allow first and last name
cout << "Enter ID ";
cin >> data1.cnt;
cin.ignore(1000,'\n');
dList.push_back(data1); //-- push this struct onto the list.
}
// I would like to remove the "Ted, 2" record from the list
itr = dList.begin();
dList.pop_front(); //-- this should pop "Hello" and 1 off the list
dList.pop_front(); //-- this should pop "Ted" and 2 off the list
//-- Itereate through the list and output the contents.
for(itr = dList.begin(); itr != dList.end(); itr++)
{
cout << itr->cnt << " " << itr->s << endl;
}
答案 0 :(得分:1)
这是你需要了解std :: list :: remove() - http://en.cppreference.com/w/cpp/container/list/remove
的参考资料如果您有int
之类的列表,那么只需remove()
即可。在您的情况下,虽然您的列表包含一个没有为其定义的相等运算符的结构。相等运算符是remove()
在传入的参数何时匹配列表中的内容时将知道的。注意:这将删除所有匹配的元素,而不仅仅是一个。
使用等于运算符的结构看起来像这样:
struct dat
{
string s;
int cnt;
bool operator==(const struct dat& a) const
{
return ( a.s == this->s && a.cnt == this->cnt )
}
};
或者,您可以通过迭代器从列表中删除元素。在这种情况下,您将使用erase()
。
这实际上取决于你想要做什么以及为什么你选择使用std :: list。 如果你不熟悉这些术语,我建议先阅读更多。