2014-11-02 40 views
0

所以我試圖刪除所有從列表中結構的變量,我的結構是這樣如何從結構列表中刪除1結構如果匹配變量?

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

    } 
} 
+1

您刪除的意思現在還不清楚。你的意思是*擦除*? – 2014-11-02 16:08:06

+0

請澄清! 「_remove結構中的所有內容」是什麼意思。_重置爲默認的構造函數值? – 2014-11-02 16:08:59

+0

我希望能夠從列表中刪除單個結構。 – bilbsy 2014-11-02 16:09:19

回答

0

看起來要擦除從列表項目,你可以這樣做以下:

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

    else 
    { 
     ++itri; 
    } 
    } 
+0

真棒這工作出色謝謝:) – bilbsy 2014-11-02 16:20:14

0

你可以做這樣的事情: -

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

但記住列表,你可以刪除一個元素,而不會影響有效性的任何迭代器等元素。其他像vector或deque這樣的容器並不那麼友好。對於那些容器,只有被擦除的迭代器之前的元素保持不變。這種差異僅僅是因爲列表將元素存儲在單獨分配的節點中。取出一個鏈接很容易。矢量是連續的,在一個元素返回一個位置後,將一個元素移出所有元素。