【问题标题】:How to delete 1 struct from a list of structs if matching the variable? [duplicate]如果匹配变量,如何从结构列表中删除 1 个结构? [复制]
【发布时间】:2014-12-29 08:19:20
【问题描述】:

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

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)
    {

    }
}

【问题讨论】:

  • 不清楚你所说的删除是什么意思。你的意思是擦除
  • 请澄清! “删除结构中的所有内容。” 重置为默认构造函数值是什么意思?
  • 我希望能够从列表中删除单个结构。
  • @user2249719 std::list::erase() 然后。

标签: c++ list struct


【解决方案1】:

看起来您想从列表中删除项,您可以执行以下操作:

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

    else
    {
        ++itri;
    }
  }

【讨论】:

  • 太棒了,非常感谢:)
【解决方案2】:

你可以这样做:-

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

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

【讨论】:

    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2020-09-05
    相关资源
    最近更新 更多