C++列表.擦除(它,它)擦除某些东西吗?在哪里可以找到好的推荐信
Does C++ list.erase(it, it) erase something? Where to find good references?
我的意思是在迭代器指向同一元素的情况下。
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中第一个==最后一个的任何范围实际上都是空的。
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在映射擦除c++期间执行循环的次数
- 如何在写入文件时擦除最后一个逗号
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 有没有函数可以在擦除 c++ 中获取 deque.begin() 的 int 值?
- 当DPI感知,全屏和无框时,客户区域在WM_NCACTIVATE上擦除
- 在矢量中使用擦除时双重释放或损坏(快速顶部).如何擦除一个矢量的几个项目知道它们的索引?
- 为什么在功能内擦除元素后不列出更新?
- 在擦除或修改作为不同索引键的值时,boost::multi_index 迭代器是否无效?
- 在 stl 中的字符串中擦除关键字的工作?
- 在c++中擦除后在映射上迭代时出现的奇怪问题
- std::vector::erase() 真的会在擦除时使迭代器失效吗?
- 在 for 循环中使用 erase() 仅擦除第一行
- 尝试在矢量上使用擦除功能时"no matching function for call"
- 用字符串::擦除在C 中提取数据
- C++列表.擦除(它,它)擦除某些东西吗?在哪里可以找到好的推荐信
- std::vector:<int>:擦除在编译中失败
- 保持文本文件从擦除在一个函数,但保持能力写到它?c++
- 向量::擦除在类方法中不起作用,但在 main 中工作;没有编译器错误,只有意外的结果