如果匹配变量,如何从结构列表中删除1个结构?

时间:2014-11-02 16:04:24

标签: c++ list struct

所以我试图从列表中删除结构的所有变量,我的结构就是这样

struct LoginDetails
{
public:
    string userName;
    string userFirstName;
    string userLastName;
    string password;
    string tutor;
    int userAccess;
};

如何添加以下代码,然后删除结构中的所有内容。

cout << "Please enter a username to upgrade the account.\n";
cin >> username;
for (list<LoginDetails>::iterator itri = loginDetails->begin(); itri != loginDetails->end(); itri++)
{
    if (itri->userName == username)
    {

    }
}

2 个答案:

答案 0 :(得分:0)

您可以这样做: -

   for (list<LoginDetails>::iterator itri = loginDetails->begin(); itri != loginDetails->end(); )
   {
      if (itri->userName == username)
      {
         itri =  loginDetails->erase(itri);               
      }
      else
         itri++;
   }

但请记住,对于列表,您可以擦除元素,而不会影响对其他元素的任何迭代器的有效性。像vector或deque这样的其他容器并不那么友善。对于那些容器,只有擦除迭代器之前的元素保持不变。这种差异仅仅是因为列表在单独分配的节点中存储元素。一个链接很容易。向量是连续的,取出一个元素后,将所有元素移回一个位置后。

答案 1 :(得分:0)

您希望从列表中擦除项目,您可以执行以下操作:

 list<LoginDetails>::iterator itri = loginDetails->begin(); 
 while (  itri != loginDetails->end() )
 {
    if (itri->userName == username)
    {
        loginDetails->erase(itri++);
    }

    else
    {
        ++itri;
    }
  }