【发布时间】:2014-01-04 01:48:48
【问题描述】:
为什么我们有上述两种方法来搜索集合中的元素?
还可以使用查找算法在列表或向量中查找元素,但这些提供成员函数以及成员函数预计比通用算法更快会有什么危害?
为什么我们需要删除算法并创建所有关于擦除删除的戏剧,其中删除只会移动元素,然后使用擦除删除实际元素..就像 STL 列表提供成员函数删除为什么不能其他容器只是提供删除功能并完成它?
【问题讨论】:
-
+1 好问题。我认为答案可能只是“他们搞砸了”......
-
@Mehrdad 我不认为“他们搞砸了”。我相信我可以回答这些问题,请检查我的答案。
-
@Ali:我刚刚阅读了您的答案,我认为它实际上并没有“回答”任何问题。你只是在总结现状,没有提供背后的原因。我从您的回答中得到的唯一信息是“我了解您的问题”。我真的确实认为他们搞砸了,因为
set.lower_bound不应该在那里 --std::lower_bound应该专门从事同样的工作。 -
@Mehrdad "std::lower_bound 应该专门从事同样的工作。" 我也遇到过这种情况。显然它无法做到,请参阅Is there any technical reason why std::lower_bound is not specialized for red-black tree iterators? 至于“我刚刚阅读了您的答案,我认为它实际上并没有“回答”任何问题”,我很遗憾听到这个消息。在我看来,我给出了我们需要这些功能的充分理由。
-
@Ali:我不买那个页面上的答案。它说“虽然可能有父指针,但对树要求这样似乎不合适。”。我不认为那是真的。你怎么可能避免需要父指针?如果迭代器指向正确的位置,
set::insert(iterator, value)的时间复杂度是摊销的常数时间。但是没有父指针,我认为为了确保插入后树是平衡的,树必须每次都从根开始遍历,这是不摊销的恒定时间...