gpt4 book ai didi

c++ - 在迭代器中从 std::list 中移除一个条目

转载 作者:行者123 更新时间:2023-11-30 00:45:45 40 4
gpt4 key购买 nike

当满足 std::list 中的条件时,我试图删除列表中的元素。我在引用资料中读到关于 erase 函数返回值的内容:

An iterator pointing to the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.

Member type iterator is a bidirectional iterator type that points to elements.

我把这个例子放在一起:

#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...

谁能帮我弄清楚我理解错了什么?它以某种方式跳过了第二个元素...

最佳答案

您正在跳过已删除元素之后的元素。

您应该使用 其中之一 it = list.erase(it);++it,但不能同时使用。

关于c++ - 在迭代器中从 std::list 中移除一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42132798/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com