我試圖在條件滿足std::list
時刪除列表中的元素。我已閱讀有關erase
函數的返回值的參考:從迭代器中刪除std :: list中的條目
的迭代器指向隨後通過函數調用刪除最後一個元素 的元素。如果 操作刪除了序列中的最後一個元素,則這是容器結束。
成員類型迭代器是一種雙向迭代器類型,指向 元素。
我已經把這個例子起來:
#include <string>
#include <list>
#include <iostream>
int main()
{
typedef std::list<std::string> string_list_t;
string_list_t list;
list.push_back("test1");
list.push_back("test2");
list.push_back("test3");
list.push_back("test4");
list.push_back("test5");
list.push_back("test6");
list.push_back("test7");
list.push_back("test8");
for (string_list_t::iterator it = list.begin(); it != list.end(); ++it)
{
std::string &str = *it;
std::cout << "Checking " << str << "..." << std::endl;
if (str == "test4")
{
std::cout << "Found test4!" << std::endl;
}
else
{
it = list.erase(it);
}
}
return 0;
}
它不給我預期的輸出,而不是它給了我:
Checking test1...
Checking test3...
Checking test5...
Checking test7...
有人可以幫助我找出我的理解錯誤?它以某種方式跳過每個第二個元素...
gnaaaaah宕它。謝謝! – Nidhoegger