C++列表.擦除(它,它)擦除某些东西吗?在哪里可以找到好的推荐信

Does C++ list.erase(it, it) erase something? Where to find good references?

本文关键字:擦除 在哪里 推荐信 列表 C++      更新时间:2023-10-16

我的意思是在迭代器指向同一元素的情况下。

Onhttp://www.cplusplus.com/reference/stl/list/erase/比如"从列表容器中删除单个元素(位置)或一系列元素([first,last))。"第一,最后指定要删除的列表容器中的范围的迭代程序:[第一个,最后一个)。即,该范围包括第一个和最后一个之间的所有元素,包括第一个指向的元素,但不包括最后一个指向的。">

我完全不知道我是否做错了所有的事情,但对于我代码的每一部分,我都找不到任何地方需要的信息,当我想自己测试它时,我会陷入这样的境地,当我不知道发生了什么,在问了这里并争论了很长时间后,我发现了类似于"未定义行为"的东西。有人能帮我更快吗?现在是什么?

我想成为更好的程序员,找到比cplusplus.com和cppreference.com更好的源代码,因为它们都很糟糕,还有更好的吗?我对这个C++一天比一天疯狂(但我仍然认为它比Java或C更适合快速的大型程序),请帮帮我。

标准自己的范围定义(24.2.1p7,强调矿):

在数据结构上操作的库的大多数算法模板都有使用范围的接口。范围是一对迭代器,用于指定计算的开始和结束范围[i,i)是一个空范围;通常,范围[i,j)是指数据结构中从i指向的元素开始直到但不包括j指向的元素的元素。

因此,假设it是位于lst末尾或末尾之后的有效迭代器,则调用lst.erase(it,it)将从lst中擦除一组空元素。也就是说,它什么都不做。

我认为,为了最好地回答您的问题,您应该思考迭代器是如何工作的,以及为什么所有内容都作为[第一,最后]而不是其他内容传递。

关于迭代器,有两条核心规则需要牢记。您总是可以增加一个(也就是说,第一个++),并且指向同一元素的两个迭代器总是相等的。知道了这一点,您就可以使用以下逻辑在任何范围的迭代器上循环:

for(; first != last; first++)
{
}

所以,如果第一个和最后一个相等,什么都不会发生。所以,若你们调用list。擦除(它,它),并没有什么东西会被擦除。

把它放在一个更通用的形式中。STL中第一个==最后一个的任何范围实际上都是空的。