std::list
で条件が満たされたときにリスト内の要素を削除しようとしています。イテレータ中にstd :: listからエントリを削除します
関数呼び出しによって消去最後の要素 を追った要素を指すイテレータを:私は何
erase
関数の戻り値について参考に読みました。 操作でシーケンスの最後の要素が消去された場合は、コンテナの最後です。メンバー型iteratorは、 要素を指す双方向イテレータ型です。
私は一緒にこの例を入れている:
#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...
誰かが私が理解し何を考え出す助けることができます違う?何とか2番目の要素をスキップします...
gnaaaaahの一顧にそれを、それを参照してください。ありがとうございました! – Nidhoegger